【发布时间】:2019-09-09 22:19:44
【问题描述】:
因此,int 可以隐式转换为 decimal。当需要 decimal 属性的 Expression 时,这会导致问题,其中传递了具有隐式转换的 int 属性的 Expression。由于隐式转换,没有给出编译器错误。
例如:
class Thing {
public int IntProperty { get; set; }
}
void DoSomething(
Expression<Func<Thing, decimal>> pDecimalExpression
) {
...
}
DoSomething(t => t.IntProperty); // compiles; IntProperty is implicitly cast to decimal
有没有办法在编译时确保我真的得到了decimal 属性?如果我像这样传递一个带有隐式转换的表达式,我想要一个编译器错误。
(由于我使用反射,我最终得到一个运行时错误,说我正在使用的属性不能被赋予decimal 值。我觉得我能做的最好的就是检测类型不匹配我自己在运行时并抛出一个稍微好一点的错误。)
【问题讨论】:
标签: c#