Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 间接更改类参数_C# - Fatal编程技术网

C# 间接更改类参数

C# 间接更改类参数,c#,C#,我正在使用反射在TreeListView上显示一个类。 TreeListView使用一个ChildrenGetter()委托,该委托获取要显示的节点(请参阅) 为了显示该类(我们将其称为反射类),树的根是该类的一个实例,ChildrenGetter(object x)使用反射返回反射类的每个子类的实例 例如,对于此类: public class Folder { public int BuildNumber { get; set; } public int MaxSpeed {

我正在使用反射在TreeListView上显示一个类。 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#中是否有一些指针等价物可以实现这种功能

    你能想出更好的解决办法吗

    注:

    • 树可以有包含其他类的类,深度不受限制。现在,我没有在任何地方使用structs
    • 我不能改变课程。它是自动生成的
    • 安全代码是首选,但如果没有其他可用的代码,不安全代码也可以

    如果您能够将一些元数据附加到您创建的控件/树项,那么您可以创建一个
    操作
    并将其分配给标记或类似的内容

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

    Action=val=>instance.X=val;
    
    能否将
    操作
    附加到它上,以便作为该属性的setter执行该操作?是的,但该操作如何知道要更改哪个参数?如果可以,请将操作
    val=>instance.X=val
    附加到标记或其他内容上。这是我所希望的最佳解决方案。谢谢不客气。我加上它作为一个答案,请让我知道,如果它帮助你。
    Action<string> action = val => instance.X = val;