、C#オブジェクトインスタンスのカスタムプロパティの* value *を取得しますか? .NET 4を使用して
はのは、私がCustomTypeDescriptor
を拡張するクラスInfo
があるとしましょう。クラスInfo
のインスタンスは、実行時にロード<string, object>
ペアの辞書を持っています。
(Info
の各インスタンスは異なる特性を有するように)私は、プロパティとして辞書キーを公開できるようにしたいです。プロパティの値は、辞書内の対応する値にする必要があります。私は、露光特性のために暇
:
public override PropertyDescriptorCollection GetProperties()
{
var orig = base.GetProperties();
var newProps = dictionary.Select(kvp =>
TypeDescriptor.CreateProperty(
this.GetType(),
kvp.key,
typeof(string)));
return new PropertyDescriptorCollection(
orig.Cast<PropertyDescriptor>()
.Concat(newProps)
.ToArray());
}
問題があるが、どのように私はそれらの値を得るのですか?
var info = new Info(new Dictionary<string, object>{{"some_property", 5}};
var prop = TypeDescriptor.GetProperties(i_info)["some_property"];
var val = prop.GetValue(i_info); //should return 5
私はprop.GetValue()
が呼び出されたときに制御を取得するために見つけた唯一の方法は、GetPropertyOwner(PropertyDescriptor pd)
を上書きすることでしたが、私はそれを理解する方法は、それは私がコンパイルされている別のタイプ一致実数(のインスタンスを返すことを期待します)プロパティです。
私は自分自身(この例では、そのキーが一致プロパティ名を辞書に値を返す)プロパティの実際の実装を書くことができるようにしたいと思います。
これは可能ですか?
ダイナミックプロパティにCustomTypeDescriptorを使用することは可能ですが(ストレッチしているかもしれませんが)しかし、「動的な」提案に対して+1。私はすでにそれを使用する方法を学ぶ必要があります:) –