2010-05-03 15 views
3

我有下面的代碼塊我在我的測試中使用的有一點重複:創建System.Func沒有指定通用參數

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 

我的問題是,我不得不爲兩個不同的函數調用創建兩個單獨的變量getUser和GetPlan,以顯式聲明泛型參數。

是否可以在不聲明泛型類型的情況下創建System.Func?

喜歡的東西:

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

這顯然將無法編譯爲T沒有定義。

有沒有辦法解決這個問題?

+0

爲什麼你想將它們放到同一個變量? – R0MANARMY 2010-05-03 13:28:41

回答

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 
} 

當然,不知道究竟你試圖做什麼邏輯,這個問題有點難回答。

1

會是有意義的做到這一點:

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