Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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#,我有5个字符串变量。 然后我把它们列在一个列表中 如果在列表中循环到字符串变量的实际名称时有什么方法?否,则不可能。将字符串变量添加到列表时,仅存储在列表中的变量的值,而不是先前用于存储值的变量名。您可以创建字典,并按如下方式进行迭代: var dict = new Dictionary<string, string>(); dict.Add("var1", var1); ... //do it for all variables foreach (var variable in d

我有5个字符串变量。 然后我把它们列在一个列表中


如果在列表中循环到字符串变量的实际名称时有什么方法?

否,则不可能。将字符串变量添加到
列表时
,仅存储在列表中的变量的值,而不是先前用于存储值的变量名。

您可以创建
字典
,并按如下方式进行迭代:

var dict = new Dictionary<string, string>();
dict.Add("var1", var1);
... //do it for all variables
foreach (var variable in dict.Keys)
{
    var varname = variable;
    var varvalue = dict[variable];
}
static void Main()
{
    var someVar = 3;

    Console.Write(GetVariableName(() => someVar));
}
var dict=newdictionary();
dict.Add(“var1”,var1);
... //对所有变量都这样做
foreach(dict.Keys中的var变量)
{
var varname=变量;
var varvalue=dict[变量];
}
键将是变量名,值将是变量值

编辑:

可以使用表达式树并将变量升级为闭包:

static string GetVariableName<T>(Expression<Func<T>> expr)
{
    var body = (MemberExpression)expr.Body;

    return body.Member.Name;
}
最后,你可以用C#6这样做:


不过,我不知道这样做的原因是什么。如果您需要将变量名保留为键,请像@wudzik sugested那样执行操作。

您无法还原局部变量的名称您可以使用
字典
其中key是var name,value是var value并遍历键您需要变量名做什么?您实际想要实现的是什么?可以使用C#6.0string中引入的
nameof
运算符,字符串不包含其变量名或任何内容的信息。这只是一系列的字符。例如,您可以使用Tuple,其中第二项包含变量名。如果您添加到问题的链接,可能最好添加到原始问题的链接,而不是重复:@wudzik虽然问题是重复的,但我发现它更具说服力,无论如何我都会接受这个建议。非常感谢。
static void Main()
{
    var someVar = 3;

    Console.Write(nameof(someVar));
}