c# – 间接改变类参数

我正在使用反射在TreeListView( ObjectListView)上显示一个类.

TreeListView与ChildrenGetter()委托一起使用,该委托获取要显示的节点(参见 here).

为了显示类(我们称之为反射类),树的根是类的实例,而ChildrenGetter(对象x)使用反射来返回反射类的每个子节点的实例.

例如,对于这个类:

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

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

这样可以,但仅用于显示.我希望能够在UI上更改BuildNumber和MaxSpeed的值,以便它们实际上可以更改树根所包含的反射类的实例.

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

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

解决方案2甚至可能吗?在C#中是否有一些指针可以允许这样的功能?

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

笔记:

>树可以包含其他类的类,深度不受限制.现在,我没有在任何地方使用结构
>我无法改变反映的课程.它是自动生成的
>首选安全代码,但如果没有其他可用的安全代码,则可以使用

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

如果你有它的实例,你可以这样(使用字符串作为样本数据类型):

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