我有一个包含超过100个唯一命名属性的类和超过20个子类,有时在列表中.以下是我的意思的简化说明:
public class classA
{
public String PropertyA1 { get; set; }
public int PropertyA2{get;set;}
public List<classB> myList;
public classC myClass { get; set; }
public void SetProperty(String PropertyName)
{
// Match property name to property in this class or child class.
}
}
class classB
{
public String PropertyB1 { get; set; }
public bool PropertyB2 { get; set; }
}
class classC
{
public String PropertyC1 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想做两件可能会或可能不会成功的事情.我需要做的第一件事是遍历每个公共属性,包括列表中的子类和类的公共属性,并转换值.我知道我可以通过序列化到xml并解析结果来完成解析.我甚至有代码转换为xml,因为类的功能是构建一个xml对象.但是,我担心通过xml解析可能比通过反射访问属性要昂贵得多.可以以这种方式使用反射,并且它比修改xml更快吗?
我想做的另一件事是访问任何将属性名称传递给方法的属性.我意识到我需要一个单独的方法来访问列表中的类,并且可能必须将列表转换为字典.问题是,这是否可行,代码只需要在父类中,或者每个子类是否需要重复代码?
And*_*bel 10
将使用给定名称设置属性的方法:
public void SetProperty(String propertyName, object value)
{
this.GetType().GetProperty(propertyName).SetValue(this, value);
}
Run Code Online (Sandbox Code Playgroud)
关于实施的一些事项:
this必须再次传递给SetValue()调用.您可以通过使用GetProperties()获取对象的所有属性(包括继承的属性)来解决问题的第二部分,即迭代属性列表:
var properties = this.GetType().GetProperties();
Run Code Online (Sandbox Code Playgroud)