gpt4 book ai didi

c# - 按名称调用属性

转载 作者:太空狗 更新时间:2023-10-29 22:26:51 34 4
gpt4 key购买 nike

我有一个类有 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; }
}

我想做两件可能或不可能的事情。我需要做的第一件事是遍历每个公共(public)属性,包括子类和列表中的类的属性,并转换值。我知道我可以通过序列化为 xml 并解析结果来完成解析。我什至拥有转换为 xml 的代码,因为该类的功能是构建一个 xml 对象。但是,我担心通过 xml 进行解析可能比通过反射访问属性要昂贵得多。这种方式可以使用反射吗,会不会比修改xml更快?

我想做的另一件事是访问将属性名称传递给方法的任何属性。我意识到我需要一个单独的方法来访问列表中的类,并且可能必须将列表转换为字典。问题是,这是否可能,代码只需要在父类中,还是每个子类都需要重复代码?

最佳答案

使用给定名称设置属性的方法:

    public void SetProperty(String propertyName, object value)
{
this.GetType().GetProperty(propertyName).SetValue(this, value);
}

关于实现的一些事情:

  • 使用的类型是对象的动态实际类型,它将找到派生类中的成员(当然,只要对象是派生类型)。
  • 属性信息不知道它来自哪个对象,因此 this 必须再次传递给 SetValue() 调用。

问题的第二部分,遍历属性列表,可以通过使用 GetProperties() 获取对象的所有属性(包括继承的属性)来解决:

var properties = this.GetType().GetProperties();

关于c# - 按名称调用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17305632/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com