我在我的测试中使用了以下代码,它有一些重复:
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未定义,显然无法编译。
有没有办法解决这个问题?
答案 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
}
当然,如果不知道你想要做什么逻辑,这个问题就有点难以回答了。