Следующий пример возврата по ссылке - Что нового в С# 7.0:
public ref int Find(int number, int[] numbers)
{
for (int i = 0; i < numbers.Length; i++)
{
if (numbers[i] == number)
{
return ref numbers[i]; // return the storage location, not the value
}
}
throw new IndexOutOfRangeException($"{nameof(number)} not found");
}
Это компилируется без каких-либо проблем (как вы ожидали, скопировав из блога Microsoft).
Я написал это:
private static ref int GetReference(string searchTerm)
{
var passwords = new Dictionary<string, int>
{
{"password", 1},
{"123456", 2},
{"12345678", 3},
{"1234", 4},
{"qwerty", 5},
{"12345", 6},
{"dragon", 7}
};
return ref passwords[searchTerm];
}
Этот не компилируется; он дает следующую ошибку:
CS8156 Выражение не может использоваться в этом контексте, потому что оно не может быть возвращено ссылкой
Почему возвращается из массива, но возврат из коллекции не выполняется?