首页 > 解决方案 > 具有两个泛型参数和推理的 C# 泛型方法

问题描述

我有一个关于具有两个泛型参数的泛型方法的问题。想象一下:

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

标签: c#genericstype-inference

解决方案


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

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

推荐阅读