获取元素在foreach中引用的名称

时间:2017-12-09 14:10:48

标签: c# arrays string foreach nameof

我试图让nameof变量通过foreach循环传递。

string[] printThis = {"doesntMatter"};
string[] andThis = {"doesntMatter"};
string[][] arrayOfArrays = {printThis, andThis};

foreach(string element in arrayOfArrays)
{
    string theNameOfTheElement = nameOf(element);
    Console.WriteLine(theNameOfTheElement + " ");
}

而不是获得所需的

结果
printThis andThis

我显然只是:

element

这是不允许的?一个更好的方法?

2 个答案:

答案 0 :(得分:2)

nameof运算符比你暗示的要简单得多:它给你变量/ field / type / etc的名称。你作为参数传递给它。在您的情况下,这相当于"element"字符串。

除非您将该信息保存在单独的数组或集合中,否则无法找出用于设置string[][]元素的变量:

string[][] arrayOfArrays = {printThis, andThis};
string[] namesOfArrays =  {nameof(printThis), nameof(andThis)};

更好的方法是创建名称 - 数组对的集合:

var arrayOfArrays = {
    new {Name = nameof(printThis), Array=printThis}
,   new {Name = nameof(andThis), Array=andThis}
};
foreach (var p in arrayOfArrays) {
    Console.WriteLine(p.Name);
    ...
}

答案 1 :(得分:1)

无法从值中找到变量的名称 使用nameof,您可以根据nameof docs

获取Method,Property,Class,variable ...的字符串名称