1. ホーム
  2. c#

[解決済み] 文字列名によるクラスプロパティの設定/取得 [重複]。

2023-03-02 02:46:23

質問

私がやろうとしていることは、文字列を使用してクラスのプロパティの値を設定することです。 例えば、私のクラスには以下のようなプロパティがあります。

myClass.Name
myClass.Address
myClass.PhoneNumber
myClass.FaxNumber

すべてのフィールドは string 型なので、常に文字列であることが事前に分かっています。 では、文字列を使ってプロパティを設定できるようにしたいと思います。 DataSet オブジェクトと同じように、文字列を使ってプロパティを設定できるようにしたいのです。 このようなものです。

myClass["Name"] = "John"
myClass["Address"] = "1112 River St., Boulder, CO"

理想は、変数を代入して、その変数からその文字列名を使ってプロパティを設定することです。

string propName = "Name"
myClass[propName] = "John"

私はリフレクションについて読んでいて、多分それはそれを行うための方法ですが、私はクラスのプロパティアクセスをそのまま維持しながら、それを設定するためにどのように行くのかがわかりません。 私はまだ使用することができるようにしたいです。

myClass.Name = "John"

どんなコード例でも本当に素晴らしいです。

どのように解決するのですか?

インデクサープロパティである 疑似コード :

public class MyClass 
{
     public object this[string propertyName] 
     {
        get
        {
           // probably faster without reflection:
           // like:  return Properties.Settings.Default.PropertyValues[propertyName] 
           // instead of the following
           Type myType = typeof(MyClass);                   
           PropertyInfo myPropInfo = myType.GetProperty(propertyName);
           return myPropInfo.GetValue(this, null);
        }
        set
        {
           Type myType = typeof(MyClass);                   
           PropertyInfo myPropInfo = myType.GetProperty(propertyName);
           myPropInfo.SetValue(this, value, null);
        }
     }
}