c# - 如何在 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
解决方案
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"]();
推荐阅读
- css - 在 CSS 中用作字体系列时,Font Awesome 5 图标不呈现
- machine-learning - 比较模型的性能并为结果添加注释
- cypress - 赛普拉斯无法正确识别图标代码
- git - How to go about creating a changelog.md on every merge from master to staging branch?
- powershell - 关于使用 powershell 在命令提示符中更改目录
- spring - How to correctly configure a spring resource server?
- postgresql - Is there an option to set up autoscaling for PostgreSQL on Google Cloud?
- highcharts - How to change x-axis labels in highcharts in month, week, quarter on condition?
- javascript - 通过角度移动 DOM 元素时保持焦点
- c# - 无法让我的一个 put 请求正常工作(出现 CORS 错误)