gpt4 book ai didi

c# - 如何迭代 C# 类查找特定类型的所有实例,然后在每个实例上调用一个方法

转载 作者:太空狗 更新时间:2023-10-30 00:57:02 26 4
gpt4 key购买 nike

是否有可能(通过反射?)迭代一个对象的所有字段并在每个字段上调用一个方法。

我有这样一个类:

public class Overlay
{
public Control control1;
public Control control2;
}

我想要一个像这样的方法:

public void DrawAll()
{
Controls[] controls = "All instances of Control"
foreach (Control control in Controls)
{
control.Draw()
}
}

这能做到吗?我已经能够获取 Control 类的所有元数据,但这仅与类型相关,与特定实例无关。

我知道这看起来很奇怪,但我有我的理由。我使用的是 Unity 3D,每个控件实际上都是由编辑器实例化的 GUI 控件。

感谢您的帮助。

最佳答案

public class Program
{
static void Main(string[] args)
{
Overlay overlay = new Overlay();
foreach (FieldInfo field in overlay.GetType().GetFields())
{
if(typeof(Control).IsAssignableFrom(field.FieldType))
{
Control c = field.GetValue(overlay) as Control;
if(c != null)
c.Draw();
}
}
}
}

注意:这将过滤掉类中不是控件的字段。另外,IsAssignableFrom将为从 Control 继承的任何字段类型返回 true,假设您也希望处理这些字段。

关于c# - 如何迭代 C# 类查找特定类型的所有实例,然后在每个实例上调用一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6146640/

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