间接更改类参数

本文关键字:参数 | 更新日期: 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 的值,以便它们在树根持有的反射类的实例上实际更改。

因此,有两种方法可以做到这一点:

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

解决方案2甚至可能吗?C# 中是否有一些指针等效项可以允许此类功能?

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

笔记:

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

间接更改类参数

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

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

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