【发布时间】:2016-01-11 14:06:00
【问题描述】:
我创建了一个void 扩展方法,可以与decimal 数据类型一起使用。我希望能够在方法范围内修改this 参数变量。这是我的扩展方法的代码:
public static void SetAndConvertIfHasValue(this decimal assignTo, double? valueToAssign)
{
if (valueToAssign.HasValue)
assignTo = (decimal)valueToAssign.Value;
else
assignTo = 0m;
}
但是,当我调用它时:
data.MyDecimalToSet.SetAndConvertIfHasValue(nullableDouble);
data.MyDecimalToSet 没有设置为nullableDouble 中的值(如果有的话)。
在调试中,如果我进入扩展方法,assignTo 会更改为正确的值,此更改不会冒泡到data.MyDecimalToSet。
此时我决定使用标准方法而不是扩展方法来解决这个问题,但是我很好奇为什么这不起作用?以及是否有解决方法,或者根本不可能?
【问题讨论】:
-
如果你想发疯,你可以创建一个扩展方法,除了
double?之外,还需要一个Expression<decimal>,打开它并使用一点反射设置属性。然后你会在基础对象而不是属性上调用它,就像这样:data.SetAndConvertIfHasValue(d => d.MyDecimalToSet, nullableDouble)。它更丑更慢,但它有效!
标签: c# extension-methods