【发布时间】:2012-10-05 14:16:36
【问题描述】:
我在尝试调整 Jon Skeet 的书中 C# 中的清单 3.4 时收到以下错误消息...
类型“list_3_4.Dog”不能用作泛型类型或方法“list_3_4.Program.CompareToDefault(T)”中的类型参数“T”。 没有从“list_3_4.Dog”到“System.IComparable”的隐式引用转换。
这是我的代码...
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 但我不知道怎么做!
【问题讨论】:
-
您的
Dog类似乎没有实现IComparable<Dog>,正如通用约束where T : IComparable<T>所指定的那样。 -
+1 我可以复制、粘贴和使用的代码示例。虽然一个问题会很好大声笑
-
以下不会工作 public class Dog : IComparable
,我试过 public class Dog: IComarable ...有效! -
@DemetriusBerlioz 这对于引用类型来说是无意义的,因为它们将始终默认为
null使用default(T),因此您最好只测试 null:if (d == null)。 -
@AdamHouldsworth 感谢您为我解决这个问题!