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