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

Getting nameof what an element references in a foreach

我正在尝试获取 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

这是不允许的吗?有更好的方法吗?

nameof 运算符比您暗示的要简单得多:它为您提供了 variable/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);
    ...
}

无法通过值找到变量的名称 使用 nameof 您可以获得方法的字符串名称,属性,Class,变量...根据 nameof docs