1

是否可以获得指向引用的变量的名称?举个例子:

private void FillArray(int[] array, int count)
{
    array = new int[count];

    for (int i = 0; i < array.Length; i++)
    {
        array[i] = i;
    }

    Debug.WriteLine("Array {0} is now filled up with {1} values", array.Name, count);
}

Name将在上述方法中使用的数组没有属性。我知道一种解决方法是将另一个参数添加为字符串并为其分配名称,但是如何以编程方式执行此操作?我也知道我可以自己实现,但我很想知道这个特定问题的答案!

4

4 回答 4

3

是否可以获得指向引用的变量的名称?

否 - 可能有多个变量指向同一个引用。变量名与引用本身无关。

请注意,您可以使用表达式来获取属性的名称(可以是具有引用类型的支持字段的属性),使用类似于此答案中的技术。在某些情况下,这可以避免要求您提供字符串,并简化重构,但受到限制(因为它只能通过属性等工作)。

于 2012-06-09T21:40:20.767 回答
2

是否可以获得指向引用的变量的名称?

不。

通常,可能有多个具有不同名称的变量都包含对同一对象的引用。运行时中没有存储这些名称的列表。

于 2012-06-09T21:40:37.270 回答
2

(本地)变量名称只是赋予存储位置的语言名称。编译后这些名称不再存在。所以一般来说,在运行时不可能得到任何变量名。

当然,对于可以查询类的字段、属性、方法和其他内容,这是不同的。

于 2012-06-09T21:43:22.200 回答
1

不,引用没有名称。

发送给方法的不是变量,而是变量值的引用。

如果甚至有一个变量,那就是。该方法也可以使用新创建的数组调用,因此根本没有变量:

FillArray(new int[4], 4)

此外,您的方法将丢弃发送到其中的数组并创建一个新数组,因此您也可以在没有任何数组的情况下调用它:

FillArray(null, 4)

您的方法不会更改变量以引用新数组,它只是丢弃新数组。您需要为此使用reforout关键字:

private void FillArray(out int[] array, int count) {
  array = new int[count];
  for (int i = 0; i < array.Length; i++) {
    array[i] = i;
  }
}
于 2012-06-09T21:46:14.973 回答