gpt4 book ai didi

c# - 间接改变类参数

转载 作者:行者123 更新时间:2023-11-30 12:42:18 25 4
gpt4 key购买 nike

我正在使用反射在 TreeListView 上显示一个类(作者 ObjectListView)。TreeListView 与 ChildrenGetter() 委托(delegate)一起工作,后者获取要显示的节点(参见 here )。

为了显示类(我们称它为反射类),树的根是类的一个实例,ChildrenGetter(object x) 使用反射返回反射类的每个子类的实例

例如,对于这个类:

public class Folder
{
public int BuildNumber { get; set; }
public int MaxSpeed { get; set; }
}

根将是 Folder 的一个实例,它将有 2 个子节点,包含 BuildNumber 和 MaxSpeed 的值。

这可以正常工作,但仅用于显示。我希望能够在 UI 上更改 BuildNumber 和 MaxSpeed 的值,以便它们实际上会在树根持有的反射类的实例上发生变化。

所以有两种方法可以做到这一点:

  1. 保存树节点中每个节点的父类(拥有类),并为每个节点创建一个“地址路径”,然后使用反射找到更改的节点并实际更改它(在反射类实例中)
  2. 不是包含反射类参数值的树节点,它们可以包含某种指向反射类实例中参数的指针。

解决方案 2 是否可行? C# 中是否有一些等效的指针可以实现此类功能?

你能想到更好的解决方案吗?

注意事项:

  • 树可以有包含其他类的类,并且深度没有限制。现在,我没有在任何地方使用结构
  • 我无法更改反射类。它是自动生成的
  • 首选安全代码,但如果没有其他可用的代码,则不安全代码也行

最佳答案

如果您能够将一些元数据附加到您创建的控件/树项目,您可以创建一个 Action<T>并将其分配给标签或类似的东西。

如果你有它的实例,你可以像这样(使用 string 作为示例数据类型):

Action<string> action = val => instance.X = val;

关于c# - 间接改变类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290085/

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