是否可以获取引用类型的变量名称

时间:2012-06-09 21:38:30

标签: c#

是否可以获取指向引用的变量的名称?以下面的例子为例:

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 个答案:

答案 0 :(得分:3)

  

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

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

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

答案 1 :(得分:2)

  

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

没有

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

不,引用没有名称。

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

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

FillArray(new int[4], 4)

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

FillArray(null, 4)

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

private void FillArray(out int[] array, int count) {
  array = new int[count];
  for (int i = 0; i < array.Length; i++) {
    array[i] = i;
  }
}
相关问题