我有一个关于带有两个通用参数的通用方法的问题。 想象一下:
public class A
{
public string PropertyA {get;set;}
}
---------------------------------------------------------------------------
private string GetProperty<T, P>(Expression<Func<T, P>> expressionProperty)
where T : class
{
return ((MemberExpression)expressionProperty.Body).Member.Name;
}
---------------------------------------------------------------------------
void Main()
{
GetProperty<A>(x => x.PropertyA).Dump();
}
无法编译:
CS0305使用通用方法'UserQuery.GetProperty(Expression>)'需要2个类型参数
所以我必须这样调用方法:
void Main()
{
GetProperty<A,string>(x => x.PropertyA).Dump();
}
为什么编译器不能推断PropertyA
类型?
答案 0 :(得分:1)
因为您需要显式传递所有通用参数或0参数,以便编译器可以推断所有这些通用参数。干扰不能部分起作用。 但是,您可以这样做:
void Main()
{
GetProperty((A x) => x.PropertyA).Dump();
}