我试图让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运算符比您所暗示的要简单得多:它为您提供了作为参数传递给它的变量/字段/类型等的名称。在您的例子中,这相当于"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);
    ...
}

10-07 19:10
查看更多