一个泛型类使用表达式<t,bool>方法创建泛型扩展

时间:2016-05-18 14:29:08

标签: c# generics methods expression

我的代码如下:

public partial class WhereHelper<T1> { }
public static partial class WhereHelperExtension
{
    public static T Where<T,T1>(this T t, Expression<Func<T1,bool>> where) where T : WhereHelper<T1>
    {
        //do something....
        return t;
    }
}
public class Test
{
    public void Main()
    {
        WhereHelper<DateTime> dt = new WhereHelper<DateTime>();
        dt.Where(t => t.Year == 2016);//this is error
        dt.Where<WhereHelper<DateTime>, DateTime>(t => t.Year == 2016);//this is success
    }
}

扩展方法我想这样:

WhereHelper<DateTime> dt = new WhereHelper<DateTime>();
dt.Where(t => t.Year == 2016);//this is error

如何使用Expression方法创建泛型扩展。 Visual Studio无法识别“Where”扩展方法。

1 个答案:

答案 0 :(得分:2)

在C#中,如果您需要提供任何泛型参数,则必须提供所有参数。 where约束不提供类型解析器的提示,因此无法确定T1是什么。

将您的签名更改为以下内容:

public static WhereHelper<T> Where<T>(this WhereHelper<T> t, Expression<Func<T,bool>> where)
{
    return t;
}

在这里,我们完全知道 T,纯粹来自第一个参数,因此我们不必明确指定参数。