在不指定泛型参数的情况下创建System.Func

时间:2010-05-03 13:22:29

标签: c#

我在我的测试中使用了以下代码,它有一些重复:

Func<string, User> getUser = GetFirstItem<User>;

Func<string, Plan> getPlan = GetFirstItem<Plan>;

_planLeader = UserRoleHelper.GetUserWithAdditionalPlans(_commonDao, getUser, getPlan, 5);

GetFirstItem方法具有以下签名:

 T GetFirstItem<T>(string whereClause) where T : class

我的问题是我必须为2个不同的函数调用创建两个单独的变量getUser和GetPlan,以便显式声明泛型参数。

是否可以在不声明泛型类型的情况下创建System.Func?

类似的东西:

Func<T, User> getUser = GetFirstItem<T>;

由于T未定义,显然无法编译。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

这样做是否有意义:

_planLeader = UserRoleHelper.GetUserWithAdditionalPlans(
    _commonDao,
    GetFirstItem<User>,
    GetFirstItem<Plan>,
    5);

答案 1 :(得分:0)

为什么不使用双重通用方法?

Func<string, User> userDelegate = GetFirstItem<string, User>("Hello World");
Func<int, User> userDelegate2 = GetFirstItem<int, User>("Hello World2");

你的通用方法是这样的:

public Func<T, U> GetFirstItem<T, U>(string whereClause)
     where T: class
     where U: class
{
   // Logic
}

当然,如果不知道你想要做什么逻辑,这个问题就有点难以回答了。