私はいくつかの投稿を読みましたが、実行時にクラスにプロパティを追加する際にまだ問題があります。次のようなクラスがあるため、簡単にする必要があります。
public class MyClass
{
String Template;
String Term;
}
実行時に、電話、メールなどのいくつかの属性を追加する必要があります (状況によります...)。クラスの初期化中にこれらのプロパティを追加する方法を教えてください。
スレッコ
私はいくつかの投稿を読みましたが、実行時にクラスにプロパティを追加する際にまだ問題があります。次のようなクラスがあるため、簡単にする必要があります。
public class MyClass
{
String Template;
String Term;
}
実行時に、電話、メールなどのいくつかの属性を追加する必要があります (状況によります...)。クラスの初期化中にこれらのプロパティを追加する方法を教えてください。
スレッコ
ここでプロパティを追加するのは正しいことではないと思います。「Eメール」や「電話」などの属性は、キーと値の単なる追加のペアです。を使用することもできますがDictionary
、そうすると、キーを複数回使用できなくなります(たとえば、連絡先に複数の電子メールアドレスを使用できます)。したがって、を使用することもできますList<KeyValuePair<string, string>>
。そのように:
public class MyClass
{
String Template;
String Term;
public List<KeyValuePair<string, string>> Attributes { get; private set; }
public MyClass() {
Attributes = new List<KeyValuePair<string, string>();
}
public void AddAttribute(string key, string value) {
Attributes.Add(new KeyValuePair<string, string>(key, value));
}
}
// to be used like this:
MyClass instance = new MyClass();
instance.AddAttribute("Email", "test@example.com");
instance.AddAttribute("Phone", "555-1234");
C# 4.0 を使用している場合は、Expando オブジェクトを使用できます。
C# の以前のバージョンでは、これを行う一般的に受け入れられている方法は、「プロパティ バッグ」、つまりキーと値のペアのコレクション (または辞書) を作成することです。
dynamic foo = new ExpandoObject();
foo.Bar = "test";
キー/値のペアに辞書を追加できます。次に、属性を追加する場合は、辞書にKey = Attributename
,を追加するだけです。Value = YourValue
読むのは簡単です -Key = Attributename
辞書から値を取得するだけです。