首页 > 解决方案 > 如何在 C# 中获取类的变量的引用?

问题描述

如何获取类中变量的引用?我正在尝试获取变量的参考,在其他地方使用它,并且需要将更改反映在其栖息地中。

 public class PowerComINC
 {
     static int IMALF1_A = 0; //INSTRUCTOR MALF ID FOR MISC FUNCTION
     static int IMALF2_A = 0; //INSTRUCTOR MALF ID FOR MISC FUNCTION
     static int IMFIRE_A = 0; //INSTRUCTOR MALF ID FOR FIRE 

     public static ref int GetAssociatedGlobals(string variableName)
     {
         // return ref of variableName
     }
}

...

ref int val = ref PowerComINC.GetAssociatedGlobals("IMALF1_A");

val++;

Console.Writeln(PowerComINC.IMALF1_A); //Print 1

标签: c#ref

解决方案


Dictionary<string, int>您可以简单地创建一个将这些信息保存为字符串对的a ,而不是依赖于变量的名称int。然后你就不需要所有这些ref东西了:

public class PowerComINC
{
    public Dictionary<string, int> MyDict = new Dictionary<string, int>() 
    { 
        { "IMALF1_A", 0 }, 
        { "IMALF2_A", 0 }, 
        { "IMFIRE_A", 0 } 
    };
}

现在只需通过键引用一个值:

Console.Writeln(PowerComINC.MyDict("IMALF1_A")); //Print 1

根据您的评论:您仍然可以使用由反射填充的字典:

myDict = typeof(PowerComINC).GetFields(BindingFlags.Static | BindingFlags.NonPublic).ToDictionary(x => x.Name, x => x)

这为您提供了一个字典,其中包含变量名称和一个FieldInfo表示字段的 -instance,然后您可以使用它来获取实际值:

myDict["IMALF1_A"].GetValue(null);

您甚至可以将其更改为 a Dictionary<string, Func<int>>,因此 yu 可以直接获取变量值:

myDict = typeof(PowerComINC).GetFields(BindingFlags.Static | BindingFlags.NonPublic)
    .ToDictionary(x => x.Name, x => new Func<int>(() => (int) x.GetValue(null));

你现在可以使用这个 - 诚然奇怪 - 语法调用它:

var i = myDict["IMALF1_A"]();

推荐阅读