2009-01-08 8 views
18

Je suis sûr que j'ai déjà fait ça, mais je n'en trouve aucun exemple! Grrr ...Méthode générique dans une classe non générique?

Par exemple, je veux convertir un IList<T> en BindingList<T>:

public class ListHelper 
{ 
    public static BindingList<T> ToBindingList(IList<T> data) 
    { 
     BindingList<T> output = new BindingList<T>(); 

     foreach (T item in data) 
      output.Add(item); 

     return output; 
    } 
} 
+0

Quelle est la vraie question ici? Oui, les méthodes génériques sont correctes dans les classes non génériques (System.Linq.Enumerable étant probablement le plus grand exemple). –

+2

@Jon - il a raté le dans ToBindingList –

Répondre

31
ToBindingList <T> (...) 

public class ListHelper 
{ 
    public static BindingList<T> ToBindingList<T>(IList<T> data) 
    { 
     BindingList<T> output = new BindingList<T>(); 

     foreach (T item in data) 
     { 
      output.Add(item); 
     } 

     return output; 
    } 
} 
7

Vous pouvez le faire par la méthode d'extension et ce serait mieux.

public static class Extensions 
{ 
    public static BindingList<T> ToBindingList<T>(this IList<T> list) 
    { 
     BindingList<T> bindingList = new BindingList<T>(); 

     foreach (var item in list) 
     { 
      bindingList.Add(item); 
     } 

     return bindingList; 
    } 
} 
+0

C'est la façon dont je le ferais ... peut-être même de IEnumerable (sinc tout ce que vous faites est foreach) –

+0

Oui, IEnumerable serait mieux. –

+0

True. Merci pour les conseils –

11

Cela ne serait-il pas plus simple?

public static class Extensions 
{ 
    public static BindingList<T> ToBindingList<T>(this IList<T> list) 
    { 
     return new BindingList<T>(list); 
    } 
} 

Il est si simple que nous ne avons pas besoin d'une méthode d'extension ...

Suis-je manque quelque chose?

+0

Bien sûr, c'est mieux. –

+0

Pourquoi êtes-vous autorisé à faire cela? Y at-il un constructeur dans BindingList qui prend un tableau en argument et en fait un BindingList? – CodyBugstein

+0

@Imprime ce n'est pas un tableau, c'est un 'IList', et il y a un constructeur qui l'accepte comme argument: http://referencesource.microsoft.com/#System/compmod/system/componentmodel/BindingList.cs,4f2405ea796059fa , référence ligne 65 –

Questions connexes