在字符串中使用变量名获取变量的值

本文关键字:获取 变量 变量名 字符串 | 更新日期: 2023-09-27 18:10:30

我想从一个变量的名字中得到它的值。

为了澄清,XML文档将变量名作为字符串传递;我想要得到这个值

像这样:

string bublegumA = "strawberry";
string bubblegumB = "banana";   
//get which variable from the XML
string fromXML = "bubblegumB";
string output = getValue(fromXML);
//it should return "banana"

在字符串中使用变量名获取变量的值

你不能那样做。变量名只在设计时存在。一旦它被编译(没有调试符号),变量名就丢失了。

但是你可以这样做:

var myValues = new Dictionary<string, string>();
myValues["bublegumA"] = "strawberry";
myValues["bublegumB"] = "banana";
string output = myValues["bublegumB"]; // "banana"

如果您不喜欢设置属性的字典语法,您也可以使用ExpandoObject,尽管您仍然将其强制转换为字典以根据名称获取值:

dynamic myValues = new ExpandoObject();
myValues.bublegumA = "strawberry";
myValues.bublegumB = "banana";
string output1 = myValues.bublegumB; // "banana"
string output2 = (string)((IDictionary<string, object>)myValues)["bublegumB"]; // "banana"

基本上,这是一个反射的应用:

如果它是一个字段,应该可以工作:

var value = targetObject.GetType().GetField(fromXml).GetValue(targetObject, null);
如果你的class是:
public class MyClass
{
    public string BubblegumA = "Strawberry";
}

然后在你的主类中:

public static void Main()
{
    MyClass targetObject = new MyClass();
    var value = targetObject.GetType().GetField("BubblegumA").GetValue(targetObject, null);
    //value should = Strawberry
}