2010-10-25 25 views
5

No puedo encontrar una forma de pasar un tipo anónimo a una clase genérica como parámetro de tipo.tipos anónimos y genéricos

// esta es la clase que desea crear una instancia

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

... // el creador de la clase

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

// tratando de utilizar este

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

Estoy obteniendo;

Los argumentos de tipo para el método ArrayStoreGenerator.CreateInstance (System.Linq.IQueryable) 'no se pueden deducir del uso. Intente especificar explícitamente los argumentos de tipo

¿Hay alguna manera de lograr esto? (Estoy pensando en interfaces y devolver una interfaz, pero no estoy seguro de si funcionaría), ¿alguien puede ayudar a pasar tipos anon a los genéricos?

+0

¿Podría proporcionar la implementación de 'ArrayStoreGenerator'? No puedo encontrarlo con Google, así que sospecho que es una biblioteca propia. –

+0

Está allá arriba. – hazimdikenli

Respuesta

6

usersQuery está siendo escrita como la no genérico IQueryable porque se especifica explícitamente que en la declaración de la variable.

En su lugar, haga var usersQuery = .... Esto tecleará la variable como IQueryable<TAnon>, que luego coincide con la firma de ArrayStoreGenerator.CreateInstance.

3

Debe definir usersQuery como var.

2

¿Qué sucede si prueba la variable local var usersQuery en lugar de especificar explícitamente su tipo?

0

intento con ToArray:

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