2009-02-20 9 views
0

J'utilise une API qui a un objet qui renvoie IEnumerable<T>, donc quelque chose comme Object.GetEnum<T>.Passer dans <T> à une méthode où GetEnum <T> est appelé

J'ai une méthode qui à l'intérieur appellera GetEnum mais je veux ajouter aux paramètres de la méthode la possibilité de passer le type de paramètre. Ainsi, par exemple, je veux faire:

private void myMethod(apiClass??? apiclass) 
{ 
IEnumerable<itemType> enumX = ObjectGetEnum<itemType> 
} 
private void Main() 
{ 
    myMethod(apiClass1); 
    myMethod(apiClass2); 
} 

Donc, comme ci-dessus, je ne sais pas ce que le type de paramètre doit être myMethod ou comment écrire le code qui est le recenseur. J'ai essayé de passer "apiClass", la classe dont apiClass1 et apiClass2 héritent. Mais ensuite, il s'est coincé là sur ce qu'il faut faire ... et je ne pense pas que ça marche vraiment de toute façon. Donc, je ne sais pas si je ne sais pas comment faire ça en C#, ou si c'est possible, .... ou peut-être qu'il me manque quelque chose dans l'API (ou il manque quelque chose à l'API pour faciliter cela).

Merci FKC

+0

S'il vous plaît préciser la question - que voulez-vous itemType être? Qu'est-ce que apiClass veut dire exactement? Il semble que vous souhaitiez faire de myMethod une méthode générique, mais je ne peux pas vraiment le dire à partir de la question. –

Répondre

5

D'accord, je vais prendre un coup de couteau à cela, bien que je voudrais clarifier la question. Je vous soupçonne avez juste besoin de faire de la méthode générique:

private void MyMethod<TItem>() where TItem : ApiClass 
{ 
    IEnumerable<TItem> enumX = ObjectGetEnum<TItem>(); 
} 

private static void Main() 
{ 
    MyMethod<ApiClass1>(); 
    MyMethod<ApiClass2>(); 
} 
0

Êtes-vous essayez d'accéder au paramètre de type de type construit fermé à l'intérieur d'une méthode? Peut-être quelque chose comme cela fonctionnera:

using System; 

class Foo<T> { } 

class Program 
{ 
    static void Main() 
    { 
     myMethod(new Foo<String>()); 
    } 

    private static void myMethod<T>(Foo<T> foo) 
    { 
     // use the T parameter in here 
    } 
} 
0

Vous avez besoin quelque chose comme ceci:

private void myMethod<T>() 
{ 
    IEnumerable<T> enumX = ObjectGetEnum<T>(); 
} 
Questions connexes