2012-01-15 1 views
2

リフレクションの使用getメソッドとsetメソッドの両方を持つプロパティのみを取得し、getのものは無視します。私がやろうとしているのは、ユーザーが変更可能な変数のリストをユーザーに与えることで、getメソッドしか持たないプロパティを表示することは誤解を招きます。Reflectionを使用してPropertyInfoを取得し、ミューテータを持つアクセサのみを表示したい

以下のコードでは、ユーザーにはNameと表示されます。あるいは、私はおそらくそれらを両方表示することができますが、グレーアウトUniqueIDは、彼らはそれを変更することはできません知っている。

public Int64 UniqueID 
{ 
    get { return this.uniqueID; } 
} 

public String Name 
{ 
    get { return this.name; } 
    set { this.name = value; } 
} 

バックグラウンド情報:C#4.0を使用しています。

答えて

4

あなたがCanReadCanWriteプロパティを使用することができます。

Type type = ... 
var readWriteProps = type.GetProperties() 
         .Where(p => p.CanRead && p.CanWrite); 

は、上記のクエリは、公共のアクセサを持つパブリックプロパティに対してのみになりますのでご注意ください。

+0

これは素晴らしい作品に感謝。私はあなたに投票するつもりだが、そうするには十分な担当者がいない。 –

3

私はあなたが探しているプロパティがPropertyInfo.CanWriteだと思うと、これはチェックの両方を取得し、のようなものを設定するには、次のように実装することができます、

if (propInfo.CanWrite && propInfo.CanRead) 
関連する問題