一尘不染

通过字符串名称设置/获取类属性

c#

我想做的是使用字符串在类中设置属性的值。例如,我的班级具有以下属性:

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"

任何代码示例都将非常棒。


阅读 264

收藏
2020-05-19

共1个答案

一尘不染

您可以添加indexer属性,一个 伪代码

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);

        }

     }
}
2020-05-19