2012-06-09 2 views
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 для массива, который будет использоваться в указанном выше способе. Я знаю, что обходным путем будет добавление другого параметра в качестве строки и назначение имени для него, но как это сделать программно? Также я знаю, что могу сделать свою собственную реализацию, но мне интересно узнать ответ на этот конкретный вопрос!

+0

Are вы после имени переменной в вызывающей к этому методу? –

+0

да! если я передаю поле int [] с именем myArray, я хочу знать имя внутри метода для записи на выходе отладки. –

+1

Это невозможно. Локальные имена переменных - это только языковая конструкция и на самом деле не существует во время выполнения. –

ответ

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; 
    } 
} 
+0

Да, я понял, что ничего не сделал с 'int []' полями, объявленными в классе. –

3

Возможно ли получить имя переменной, которая указывает на ссылку?

Нет - могут быть несколько переменных, указывающих на ту же ссылку. Имя переменной не связано с самой ссылкой.

Обратите внимание, что вы банки использовать выражение, чтобы получить имя свойства (которое может быть свойством с опорным полем ссылочного типа), используя технику вроде one in this answer. В некоторых сценариях это может не потребовать предоставления строки и упростить рефакторинг, но ограничено (поскольку оно будет работать только через свойства и т. Д.).

2

Возможно ли получить имя переменной, которая указывает на ссылку?

No.

В целом, может быть несколько переменных с разными названиями, которые все держат ссылки на тот же объект. Список этих имен не хранится во время выполнения.

2

(Local) Имена переменных - это просто имена на языке , которые указываются в месте хранения. После компиляции эти имена больше не существуют. Так что вообще невозможно получить любые имена переменных во время выполнения.

Это отличается от полей, свойств, методов и прочего материала, который может быть запрошен о классах, конечно.

Смежные вопросы