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

标签 c# reflection properties

<分区>

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

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

关于c# - 通过字符串名称设置/获取类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10283206/

相关文章:

c# - 无法连接到在线Mysql数据库(c#)

java - 从 Ant 目标向 Java 方法传递变量

javascript - 为什么这个可配置属性不可删除?

java - 根据属性文件中的类路径加载 Java 类

c# - AddDays() 在 for 循环中

c# - 如何在单个 ASP.NET 页面中监听套接字

c# - 使用 TypedFactoryFacility 错误吗?

c# 反射(reflect)属性或其他成员类型

c# - 给定一个类型实例,如何在 C# 中获取泛型类型名称?

java - Lambda 对私有(private)方法的可访问性