2016-11-29 4 views
0

ASP.Net MVCプロジェクトでFoolproofライブラリを使用していますが、場合によっては、アトリビュートを使用しているモデルのメンバークラス内のプロパティをチェックする必要があります。C#の属性でクラスのプロパティの完全修飾名を取得するためにnameofを使用するにはどうすればよいですか?

たとえば、Address型のプロパティを持つユーザークラスがあり、AddressでCityを確認する必要があります。

「Address.City」と言うことができる例では、属性にはドット表記のプロパティの名前が必要です。

:私は後で(住所または市)私はこのようにそれを使用する場合、その目的のために、そしてもちろんのがNameOf使用する必要が

のいずれかの名前を変更する必要がある場合、これはリファクタリングの問題に苦しんでいる。もちろん

nameof(Address.City) 

都市のみが生産されます。

属性で許可される定数値を生成するため、nameofが必要です。

私は参照がそれが可能ではあるが方法はないと伝えていることがわかりました。発言のセクションで https://msdn.microsoft.com/en-us/library/dn986596.aspx それは言う:

あなたは完全修飾名を取得する必要がある場合は、あなたががNameOfとともにtypeof演算式を使用することができます。

しかし、これを行う方法を教える場所が見つかりませんでした。

誰でも助けてください。 あなたの時間と労力を事前に感謝します。

答えて

1

掘りのビットの後、私はそれが提案されているように、この問題はここにここに https://roslyn.codeplex.com/discussions/552377 MgSam

によるコメントのためで https://roslyn.codeplex.com/discussions/552376 、特別にこの機能を開発する時に、既に議論されていることがわかりました、 BindToFullyQualifiedName(nameof(Microsoft)+ "。" + nameof(Microsoft.Data)+ "。+ nameof(Microsoft.Data.Entities)+"。 "+ nameofこのような何かが起こっていると想像することができます。 (Microsoft.Data.Entities.EntityObject));

答えは、私はtypeof演算(EntityObject).FullNameは、あなたの 場合は完全に十分だと思います

ました。

これは、これを行うための別の方法についてのコメントはありませんでした。

残念なことに、残念なことに、これは、ユーザーの名前にアクセスする方法がなく、完全修飾名を属性で使用するために直接取得することを意味します。

これはおそらくこれの終わりであり、Microsoftはドキュメントをより明確かつ正確に変更する必要があると思います。

+0

私の答えをチェックしてください。 – GregaMohorko

+0

便利な議論に感謝しました。 –

+0

"残念なことに、これは、ユーザーの名前にアクセスする方法がなく、完全修飾名を属性で直接使用することを意味します。 - それは完全には真実ではありません - あなたの最初の例では、 "+"の連鎖があります。 +は、式が定数文字列に変換されるため、うまく動作します(ちょうど冗長です)。 – Rob

関連する問題