尝试从Jon Skeet的书深入C#调整 list 3.4时,收到以下错误消息...



这是我的代码...

using System;

namespace list_3_4
{
     class Program
     {
          static void Main(string[] args)
          {
               //string mystring;
               Dog d = new Dog("howie");

               Console.WriteLine(CompareToDefault("x"));
               Console.WriteLine(CompareToDefault(10));
               Console.WriteLine(CompareToDefault(0));
               Console.WriteLine(CompareToDefault(-10));
               Console.WriteLine(CompareToDefault(DateTime.MinValue));

               Console.WriteLine(CompareToDefault(d));

               Console.ReadKey();
          }

          static int CompareToDefault<T> (T value) where T: IComparable<T>
          {
               return value.CompareTo(default(T));
          }

     }

     public class Dog
     {
          private string _name;

          public Dog(string name)
          {
               _name = name;
          }
         }
}

如何添加引用类型(例如“Dog”)以与Jon Skeets代码列表一起使用???我知道Dog需要实现IComparable,但我不知道该怎么做!

最佳答案

通过说出您需要的T类型为IComparable<T>来定义方法:

where T: IComparable<T>

但是Dog没有实现IComparable<Dog>
您需要执行以下操作:
public class Dog : IComparable<Dog>
{
 //this will allow you to do a quick name comparison
 public string Name { get; set;}
 public int CompareTo(Dog other)
 {//compare dogs by name
        return this._name.CompareTo(other.Name);
 }
}

注意:default(T)将为引用类型返回 null ,因此您应该在某处进行null检查。了解有关default on msdn的信息。

关于c# - 实现IComparable <T>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12748232/

10-11 01:44