2015-12-26 2 views
3

У меня есть список класса Order, который реализует IComparable и переопределить метод ToStringметод расширения для списка

класс Order:

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"); 
     } 
    } 

Теперь я добавил расширение Метод Показать к Список и работает как ожидалось

Класс расширения

public static class ListExtension 

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

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

Теперь я хотел бы превратить мой метод Show Generic:

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

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

Но я не могу назвать общий метод расширения. Вы можете мне помочь .

+0

Покажите, как вы называете метод, какие ошибки компилятора дают и что вы пытались исследовать эту ошибку. – CodeCaster

ответ

5

Вы пропустили <T> после имени функции, чтобы сделать его родовое:

public static class ListExtension 
{ 
    public static void Show<T>(this List<T> list) 
    { 
     foreach (var item in list) 
     { 
      Console.WriteLine(item.ToString()); 
     } 
    } 
} 
2

Расширение может быть более универсальным и быстрее (я думаю):

public static void Show<T>(this IList<T> list) 
{ 
    var str = String.Join(Environment.NewLine, list); 
    Console.WriteLine(str); 
} 
Смежные вопросы