2010-10-25 9 views
5

Je ne trouve pas un moyen de passer un type anonyme à une classe générique en tant que paramètre de type.Types et génériques anonymes

// ceci est la classe je veux instancier

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

... // la classe créateur

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

// essayant d'utiliser cette

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

Je reçois;

Les arguments de type pour la méthode ArrayStoreGenerator.CreateInstance (System.Linq.IQueryable) 'ne peuvent pas être déduits de l'utilisation. Essayez de spécifier explicitement les arguments de type

Existe-t-il un moyen d'y parvenir? (Je pense à Interfaces et renvoyer une interface, mais je ne sais pas si cela fonctionnerait) quelqu'un peut-il aider à passer des types anon aux génériques.

+0

Pourriez-vous fournir l'implémentation de 'ArrayStoreGenerator'? Je ne peux pas le trouver avec Google, donc je pense que c'est une bibliothèque de votre choix. –

+0

C'est là-haut. – hazimdikenli

Répondre

6

usersQuery est tapé comme IQueryable non générique parce que vous spécifiez explicitement que dans la déclaration de la variable.

Au lieu de cela, faites var usersQuery = .... Cela va taper la variable comme IQueryable<TAnon>, qui correspond alors à la signature de ArrayStoreGenerator.CreateInstance.

3

Vous devez définir usersQuery comme var. Et si vous essayez la variable locale var usersQuery au lieu de spécifier explicitement son type?

2

0

Essayez avec ToArray:

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