下面的引用返回示例来自在C# 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表达式不能在此上下文中使用,因为它可能不会通过引用返回。
为什么从数组返回而从集合返回却不工作?
发布于 2017-04-23 21:07:49
答案就在你发布的同一个链接中:
您只能返回“安全返回”的引用:传递给您的引用和指向对象中字段的引用。
你的例子也不令人满意。您正在函数中创建列表(因此对象将超出作用域,其指针将无效),并且它不会指向对象的某个字段。
发布于 2017-04-23 21:33:20
在C#中,ref致力于:
ref不适用于:
注意,对于字段和数组位置,访问数组的方式并不重要。也就是说,return ref numbers[i];不保留numbers,而是保存它指向的数组。与return ref numbers;不同的是,只有当numbers是字段时才能工作。
但是,在ref的索引属性上使用Dictionary<,>,它开始时并不是ref支持的表达式(也就是说,即使在C# 7之前也不能将ref passwords[searchTerm]作为参数传递),更不用说由ref返回了。
https://stackoverflow.com/questions/43576471
复制相似问题