我只是在使用 C # 时遇到了这个错误消息
属性或索引器不能作为 out 或 ref 参数传递
我知道是什么原因导致了这种情况,所以我快速地创建了一个类型正确的局部变量,用它作为 out
/ref
参数调用函数,然后将它返回给属性:
RefFn(ref obj.prop);
变成了
{
var t = obj.prop;
RefFn(ref t);
obj.prop = t;
}
显然,如果属性不支持在当前上下文中获取和设置,那么这将失败。
为什么 C # 不能帮我做到这一点呢?
我能想到的唯一可能导致问题的情况是:
因为线程化转换会影响写操作的发生时间(在函数调用之后还是在函数调用中) ,但是我相信任何依赖于这种转换的代码在中断时都不会得到什么同情。
对于异常,需要考虑的问题是: 如果函数分配给几个 ref
参数中的一个,而不是抛出,会发生什么?任何琐碎的解决方案都会导致在应该和不应该分配参数的情况下分配所有或全部参数。同样,我认为这种语言的使用不会得到支持。
注意: 我了解生成此错误消息的机制。我所寻找的是为什么 C # 不自动实现这个简单的解决方案的理由。