2010-10-25 129 views
5

我找不到一種方法將匿名類型作爲類型參數傳遞給泛型類。匿名類型和泛型

//這是課堂上,我要實例

public class ExtArrayStore<T> : IViewComponent 
{ 
    public IQueryable<T> Data { get; set; } 

... //創建者類

public static class ArrayStoreGenerator 
{ 
    public static ExtArrayStore<T> CreateInstance<T>(IQueryable<T> query) 
    { 
     return new ExtArrayStore<T>(); 
    } 
} 

//嘗試使用此

IQueryable usersQuery= ((from k in bo.usersselect new { userid = k.userid, k.username}).AsQueryable()); 
     var x = ArrayStoreGenerator.CreateInstance(usersQuery); 

我正進入(狀態;

方法ArrayStoreGenerator.CreateInstance(System.Linq.IQueryable)的類型參數不能從使用情況中推斷出來。嘗試明確指定類型參數

有沒有辦法實現這一點? (我正在考慮接口並返回一個接口,但不知道它是否可行)任何人都可以幫助將匿名類型傳遞給泛型。

+0

您能否提供'ArrayStoreGenerator'的實現?我無法在Google上找到它,所以我懷疑這是您自己的圖書館。 – 2010-10-25 16:03:28

+0

它在那裏。 – hazimdikenli 2010-10-26 07:07:17

回答

6

usersQuery正在鍵入作爲非通用IQueryable因爲你明確指定在變量的聲明。

取而代之,做var usersQuery = ...。這將鍵入變量IQueryable<TAnon>,然後匹配ArrayStoreGenerator.CreateInstance的簽名。

3

您應該將usersQuery定義爲var。

2

如果您嘗試var usersQuery局部變量而不是明確指定其類型,該怎麼辦?

0

嘗試ToArray

var x = ArrayStoreGenerator.CreateInstance(usersQuery.ToArray());