例如,我可以返回对双精度值的引用吗?
这就是我想做的:
ref double GetElement()
{
......
// Calculate x,y,z
return ref doubleArray[x,y,z];
}
像这样使用它
void func()
{
GetElement()=5.0;
}
这就像在 C++ 中返回双指针......
我知道我写的方式是错误的..但是有正确的方法吗?
更新:C# 7 现在支持所需的功能。
CLR 类型系统确实支持引用返回方法,并且我已经编写了 C# 编译器的实验原型,它支持您想要的功能。 (原型还实现了引用类型局部变量,但引用类型字段在 CLR 类型系统中是非法的。)
您已经准确地想到了我为原型选择的语法,这意味着要么伟人所想都是一样的,要么傻瓜永远不会不同。
尽管原型工作得很好,但这不太可能使栏成为下一版本 C# 语言的功能。很少有客户想要这个功能,实现起来相当昂贵,我们有一个与您的手臂一样长的更重要功能的列表,并且还有其他方法可以使此类事情发挥作用,而不会给类型系统增加这种复杂性。这些都是对该功能的巨大“反对点”。
例如,您可以创建一对代表:
struct Ref<T>
{
private readonly Func<T> getter;
private readonly Action<T> setter;
public Ref(Func<T> getter, Action<T> setter)
{
this.getter = getter;
this.setter = setter;
}
public T Value { get { return getter(); } set { setter(value); } }
}
var arr = new int[10];
var myref = new Ref<int>(()=>arr[1], x=>arr[1]=x);
myref.Value = 10;
Console.WriteLine(myref.Value);
这比使用 ref 返回实现的相同功能要慢得多,但好处是您可以制作Ref<T>
在 ref 不合法的地方。例如,您可以存储Ref<T>
在字段中,您无法使用引用返回方法来做到这一点。
如果你有一个非常令人信服的场景来说明为什么你need引用返回方法,我会love来听听这件事。我们拥有的真实场景越多,这样的功能就越有可能在假设的未来版本的语言中实现。
另请参阅相关问题:
我可以在 C# 函数(如 C++)中使用引用吗?
为什么C#不支持引用的返回?
以及我关于该主题的博客文章:
http://ericlippert.com/2011/06/23/ref-returns-and-ref-locals/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)