我读过几篇文章,但在运行时向类添加属性时仍然遇到问题。它应该很简单,因为我有一个这样的类:
public class MyClass
{
String Template;
String Term;
}
在运行时,我必须添加一些属性,例如电话、电子邮件(这取决于...)。有人可以解释一下如何在类初始化期间添加这些属性吗?
斯雷科
我读过几篇文章,但在运行时向类添加属性时仍然遇到问题。它应该很简单,因为我有一个这样的类:
public class MyClass
{
String Template;
String Term;
}
在运行时,我必须添加一些属性,例如电话、电子邮件(这取决于...)。有人可以解释一下如何在类初始化期间添加这些属性吗?
斯雷科
我不认为在这里添加属性是正确的做法。“电子邮件”或“电话”等属性只是一些额外的键和值对。您可以使用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
从字典中获取值即可。