【发布时间】:2012-02-18 00:25:34
【问题描述】:
为什么 C# 编译器不能在指定示例中将 T 推断为 int?
void Main()
{
int a = 0;
Parse("1", x => a = x);
// Compiler error:
// Cannot convert expression type 'int' to return type 'T'
}
public void Parse<T>(string x, Func<T, T> setter)
{
var parsed = ....
setter(parsed);
}
【问题讨论】:
-
我也无法推断。试试
Parse<int>(...) -
解析方法的语法糖。我可以用表达式来做到这一点,但是我必须使用反射,这是不行的。
-
Expression不是reflection。请显示您要执行的操作的完整代码。 -
@L.B 这正是我现在正在做的事情。但我想知道为什么编译器无法弄清楚,因为 'x => a = x' 返回一个 int。
-
@gdoron 我可以使用表达式来获取我要设置的属性的 PropertyInfo,但我必须使用反射来调用它。