我正在试图做的是使用字符串设定在一类属性的值。 例如,我的类具有以下特性:
myClass.Name
myClass.Address
myClass.PhoneNumber
myClass.FaxNumber
所有字段都是字符串类型,所以我提前知道的时候,它总是一个字符串。 现在,我希望能够使用一个字符串,你可以使用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);
}
}
}
您可以将索引添加到您的类并使用反射来尖子属性:
using System.Reflection;
public class MyClass {
public object this[string name]
{
get
{
var properties = typeof(MyClass)
.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var property in properties)
{
if (property.Name == name && property.CanRead)
return property.GetValue(this, null);
}
throw new ArgumentException("Can't find property");
}
set {
return;
}
}
}
可能是这样呢?
public class PropertyExample
{
private readonly Dictionary<string, string> _properties;
public string FirstName
{
get { return _properties["FirstName"]; }
set { _properties["FirstName"] = value; }
}
public string LastName
{
get { return _properties["LastName"]; }
set { _properties["LastName"] = value; }
}
public string this[string propertyName]
{
get { return _properties[propertyName]; }
set { _properties[propertyName] = value; }
}
public PropertyExample()
{
_properties = new Dictionary<string, string>();
}
}