J'ai une liste d'un ordre de classe qui implémente IComparable et remplace la méthode Tostring

Classe de commande:

public class Order : IComparable
    {
        public int id { get; set; }
        public DateTime date { get; set; }
        public int CompareTo(object obj)
        {
            if (obj == null)
            {
                return 1;
            }
            else
            {
                Order order = obj as Order;
                if (order == null)
                {
                    throw new ArgumentException("object is not an order");
                }
                return this.date.CompareTo(order.date);
            }
        }
        public override string ToString()
        {
            return this.id+"--"+this.date.ToString("dd/MM/yyyy");
        }
    }

Maintenant, j'ai ajouté une méthode d'extension Afficher à la liste et cela fonctionne comme prévu

Classe d'extension

public static class ListExtension

    {
        public static void Show(this List<Order> list)
        {

            foreach (var item in list)
            {
                Console.WriteLine(item.ToString());
            }
        }
    }

Maintenant, je voudrais transformer ma méthode Show Generic:

 public static class ListExtension<T>
   {
        public static void Show(this List<T> list)
        {

            foreach (var item in list)
            {
                Console.WriteLine(item.ToString());
            }
        }
    }

Mais je ne peux pas appeler la méthode d'extension générique. Pouvez-vous m'aider .

c#
4
Ghassen 26 déc. 2015 à 21:07

2 réponses

Meilleure réponse

Vous avez manqué le <T> après le nom de la fonction pour la rendre générique:

public static class ListExtension
{
    public static void Show<T>(this List<T> list)
    {
        foreach (var item in list)
        {
            Console.WriteLine(item.ToString());
        }
    }
}
5
Camilo Terevinto 26 déc. 2015 à 18:11

L'extension peut être rendue plus générique et plus rapide (je pense):

public static void Show<T>(this IList<T> list)
{
    var str = String.Join(Environment.NewLine, list);
    Console.WriteLine(str);
}
2
Alexei 26 déc. 2015 à 18:20