是否可以获取指向引用的变量的名称?以下面的例子为例:
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
。我知道一个解决方法是将另一个参数添加为字符串并为其指定名称,但如何以编程方式执行此操作?另外我知道我可以自己实现,但我很想知道这个特定问题的答案!
答案 0 :(得分:3)
是否可以获取指向引用的变量的名称?
否 - 可能有多个变量指向同一个引用。变量名与引用本身无关。
请注意,可以使用表达式来获取属性的名称(可以是具有引用类型的支持字段的属性),使用类似one in this answer的技术。在某些情况下,这可以避免要求您提供字符串,并简化重构,但是有限(因为它只能通过属性等工作)。
答案 1 :(得分:2)
是否可以获取指向引用的变量名称?
没有
通常,可能存在多个具有不同名称的变量,这些变量都包含对同一对象的引用。运行时中没有存储这些名称的列表。
答案 2 :(得分:2)
(本地)变量名只是语言中提供给存储位置的名称。编译后,这些名称不再存在。所以一般来说,在运行时不可能得到任何变量名。
当然,对于字段,属性,方法以及可以查询类的其他内容,这是不同的。
答案 3 :(得分:1)
不,引用没有名称。
这不是发送给方法的变量,而是作为变量值的引用。
如果有变量,那就是。也可以使用新创建的数组调用该方法,因此根本不会有变量:
FillArray(new int[4], 4)
此外,您的方法将丢弃发送到其中的数组并创建一个新数组,因此您也可以在没有任何数组的情况下调用它:
FillArray(null, 4)
您的方法不会更改变量以引用新数组,它只会抛弃新数组。您需要使用ref
或out
关键字:
private void FillArray(out int[] array, int count) {
array = new int[count];
for (int i = 0; i < array.Length; i++) {
array[i] = i;
}
}