我在使用C#时遇到了这个错误消息
属性或索引器可能无法作为out或ref参数传递
我知道是什么原因造成的,并快速创建了正确类型的局部变量,并以out
/作为ref
参数调用该函数,然后将其分配回属性:
RefFn(ref obj.prop);
变成
{
var t = obj.prop;
RefFn(ref t);
obj.prop = t;
}
显然,如果该属性在当前上下文中不支持get和set,则此操作将失败。
为什么C#不能为我做到这一点?
我可以想到的地方可能是唯一的情况是:
- 穿线
- 例外情况
对于线程而言,这种转换会影响写入发生的时间(在函数调用之后还是在函数调用之后),但是我宁愿怀疑依靠它的任何代码在中断时都不会产生同情。
对于例外情况,关注的是;如果该函数分配给多个ref
参数之一而不是throw,会发生什么?任何琐碎的解决方案都会导致在某些参数应该被分配和某些参数不应该被分配时给所有参数分配或不分配参数。同样,我认为不支持使用该语言。
注意:我了解产生此错误消息的机制。我要寻找的是C#不能自动实现琐碎变通办法的理由。