gpt4 book ai didi

C# - 在复杂的类层次结构中查找具有特定名称属性的所有对象

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:19 26 4
gpt4 key购买 nike

我有一个复杂的类层次结构:B 类是 A 类的属性,列表(C 类)和 D 类是 B 类的属性,等等 - 很多级别的父子关系。层次结构中的某些类具有字符串属性“foobar”。有些类(class)没有。我有一个 A 类实例。我需要在层次结构中找到所有具有属性“foobar”的对象,并将其值更改为“qwerty”。有没有在 C# 中执行此操作的简单方法?

public class ClassD
{
public string fooBar;
}
public class ClassC
{ }
public class ClassB
{
public List<ClassC> classCList;
public ClassD classDInstance;
public string fooBar;
}
public class ClassA
{
public ClassB classBInstance;
}

最佳答案

您可以使用 Reflection,虽然我不太喜欢这样,但我想这是完成您需要的最简单的方法。

下面的代码不是很漂亮,但希望能给你一个想法。

    private static void replaceFoobar(object obj)
{
if (obj == null)
return;

const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.GetProperty | BindingFlags.Instance;
FieldInfo[] members = obj.GetType().GetFields(bindingFlags);

if (!members.Any())
return;

foreach (var item in members)
{
if (item.Name == "fooBar" || item.Name == "<fooBar>k__BackingField")
{
item.SetValue(obj, "qwerty");
}
else
{
object value = item.GetValue(obj);

if (value != null && value is IEnumerable)
{
foreach (var itemE in ((IEnumerable)value))
replaceFoobar(itemE);
}
else
replaceFoobar(value);
}
}
}

关于C# - 在复杂的类层次结构中查找具有特定名称属性的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486226/

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