相关疑难解决方法(0)

属性或索引器不能作为out或ref参数传递

我收到上述错误,无法解决.我google了一下,但无法摆脱它.

场景:

我有类BudgetAllocate,其属性是预算,是双重类型.

在我的dataAccessLayer中,

在我的一个课程中,我试图这样做:

double.TryParse(objReader[i].ToString(), out bd.Budget);
Run Code Online (Sandbox Code Playgroud)

这引发了这个错误:

在编译时,属性或索引器不能作为out或ref参数传递.

我甚至试过这个:

double.TryParse(objReader[i].ToString().Equals(DBNull.Value) ? "" : objReader[i].ToString(), out bd.Budget);
Run Code Online (Sandbox Code Playgroud)

其他一切工作正常,层之间的引用存在.

.net c# error-handling

73
推荐指数
6
解决办法
7万
查看次数

C#属性和ref参数,为什么没糖?

我刚刚在C#中工作时遇到此错误消息

属性或索引器不能作为out或ref参数传递

我知道造成这种情况的原因并快速解决了创建正确类型的局部变量的问题,使用它作为out/ ref参数调用函数,然后将其分配回属性:

RefFn(ref obj.prop);
Run Code Online (Sandbox Code Playgroud)

变成

{
    var t = obj.prop;
    RefFn(ref t);
    obj.prop = t;
}
Run Code Online (Sandbox Code Playgroud)

显然,如果属性不支持在当前上下文中获取和设置,则会失败.

为什么C#不能为我这样做?


我能想到这可能导致问题的唯一情况是:

  • 穿线
  • 例外

对于线程转换影响写入发生时(在函数调用之后与函数调用之间),但我宁愿怀疑任何依赖的代码在它中断时会得到很少的同情.

对于例外,关注的是; 如果函数分配给几个ref参数之一而不是抛出会发生什么?任何一个简单的解决方案都会导致所有参数都被分配给某些参数,而某些参数不应该分配给某些参数.我再次认为这不会支持使用该语言.


注意:我理解为什么会生成此错误消息的机制.我正在寻找的是为什么C#不会自动实现简单的解决方法.

c# properties syntactic-sugar reference-parameters

70
推荐指数
6
解决办法
4万
查看次数