具有两个通用参数和推论的C#通用方法

时间:2018-10-04 13:29:40

标签: c# generics type-inference

我有一个关于带有两个通用参数的通用方法的问题。 想象一下:

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类型?

1 个答案:

答案 0 :(得分:1)

因为您需要显式传递所有通用参数或0参数,以便编译器可以推断所有这些通用参数。干扰不能部分起作用。 但是,您可以这样做:

void Main()
{
    GetProperty((A x) => x.PropertyA).Dump();
}