PropertyInfoプロパティがその型に対して定義されているという事実を単に表します。オブジェクトごとではありません-タイプ用です。を取得するためにインスタンスは必要ありませんPropertyInfo。
ただし、最初に、myProperty現在はプロパティではないことに注意してください。最初に修正しましょう。
public MyClass
{
public double MyProperty {get;set;}
}
これで、「それが持っているすべてのプロパティ」について尋ねることで、そのプロパティについて知ることができます。
PropertyInfo[] props = typeof(MyClass).GetProperties();
または個々のプロパティ。おそらく実行時に構成から名前を取得します。
PropertyInfo prop = typeof(MyClass).GetProperty("MyProperty");
PropertyInfo名前、型、属性などを調べることができます - ライブラリコードに非常に役立ちます。ただし、通常のコードでは、静的 C# を使用するのが最も簡単なオプションです。
foreach(MyClass obj in MyClassList) {
obj.MyProperty = 123.45;
}
リフレクションを介してこれを行う必要がある場合は、次を使用できますSetValue。
foreach(MyClass obj in MyClassList) {
prop.SetValue(obj, 123.45, null);
}
ただし、より長い距離に行かない限り、反射は比較的遅くなります。たとえば、「実行時に名前を知る」シナリオを対象とする別の代替手段はFastMemberです。次に、次のことができます。
var accessor = TypeAccessor.Create(typeof(MyClass));
string propName = "MyProperty";
object value = 123.45;
foreach(MyClass obj in MyClassList) {
accessor[obj, propName] = value;
}
これは、生のリフレクションよりもはるかに高速ですが、実行時にプロパティ名を見つけるという点で柔軟性があります。