间接更改类参数
本文关键字:参数 | 更新日期: 2023-09-27 18:26:49
>我正在使用反射在TreeListView(通过ObjectListView(上显示一个类。TreeListView 与一个ChildrenGetter()
委托一起工作,该委托获取要显示的节点(请参阅此处(。
为了显示类(我们将其称为反射类(,树的根是类的实例,ChildrenGetter(object x)
使用反射返回反射类的每个子级的实例。
例如,对于此类:
public class Folder
{
public int BuildNumber { get; set; }
public int MaxSpeed { get; set; }
}
根将是文件夹的实例,它将有 2 个子节点,包含 BuildNumber 和 MaxSpeed 的值。
这工作正常,但仅适用于显示。我希望能够在 UI 上更改 BuildNumber 和 MaxSpeed 的值,以便它们在树根持有的反射类的实例上实际更改。
因此,有两种方法可以做到这一点:
- 将每个节点的父节点(拥有类(
- 保存在树节点中,并为每个节点创建一个"地址路径",然后使用反射找到更改的节点并实际更改它(在反射类实例中( 代替包含反射类参数
- 值的树节点,它们可以保存指向反射类实例中的参数的某种指针。
解决方案2甚至可能吗?C# 中是否有一些指针等效项可以允许此类功能?
你能想到更好的解决方案吗?
笔记:
- 树可以包含包含其他类的类,并且深度不受限制。目前,我没有在任何地方使用结构
- 我无法更改反射的类。它是自动生成的
- 安全代码是首选,但是如果没有其他可用代码,则不安全代码就可以了
如果您能够将一些元数据附加到您创建的控件/树项,则可以创建一个Action<T>
并将其分配给标签或类似的东西。
如果你有它的实例,你可以这样(string
用作示例数据类型(:
Action<string> action = val => instance.X = val;