这是关于LANGUAGE DESIGN的问题.
在你阅读完整篇文章之前请不要回答这个问题!谢谢.
由于所有助手都存在于C#中(如lambdas或自动属性),因此我无法通过引用传递属性.让我们说我想这样做:
foo(ref my_class.prop);
我收到错误所以我写了:
{ var tmp = my_class.prop; foo(tmp); my_class.prop = tmp; }
现在它有效.但请注意两件事:
>它是通用模板,我没有放任何类型,只有“var”,所以它适用于我必须通过的所有类型和数量的属性
>我必须一遍又一遍地做,没有任何好处 – 这是机械工作
现有问题实际上杀死了Swap等有用的功能.交换通常为3行,但由于它需要2个引用,因此调用它需要5行.当然这是无稽之谈,每次我都想用它来手写“交换”.但是这表明C#阻止了可重复使用的代码,这很糟糕.
问题
那么 – 如果编译器自动创建临时变量(就像我手工做的那样)会发生什么不好,调用函数,并将值分配回属性?这有危险吗?我没有看到它所以我很好奇你觉得为什么这个问题的设计看起来像现在看起来.
干杯,
编辑由于280Z28提供了很好的例子来打败自动包装ref属性的想法,我仍然认为使用临时变量包装属性会很有用.也许是这样的:
Swap(inout my_class.prop1,inout my_class.prop2);
否则没有真正的交换C#:-(