假设我的Utils类中有一个静态方法,它设置属性的值。
public static SetPropertyValue<TDest, TVal>
(Expression<Func<TDest, TVal>> expression,
TDest destination,
TVal value)
{
// ...
}
此外,还有一个课程:
public class DataObject { public short Code { get; set; } }
使用代码:
DataObject obj = new DataObject();
int code = 404;
Utils.SetPropertyValue(m => m.Code, obj, code);
运行上面的代码时,表达式更改为m => Convert(m.Code)
,因为给出的第三个参数是整数,表达式需要 short 。这意味着类型推断系统决定更喜欢第三个参数来确定TVal
类型。
我希望此方法的第三个参数(值)限制为第一个参数(表达式)定义的类型。这可能吗?如果是,怎么样?
答案 0 :(得分:2)
不,你不能以这种方式影响类型推断 - 如果它 推断TVal
为short
,你的代码将无法编译,因为没有隐含从int
转换为short
。
当然,最好的解决方案是避免使用两种不同的类型:
short code = 404;
Utils.SetPropertyValue(m => m.Code, obj, code);
现在可以正确推断类型,并且不会有任何转换。