c# – 泛型和实现IComparable

前端之家收集整理的这篇文章主要介绍了c# – 泛型和实现IComparable前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对泛型非常新,我正在尝试编写一个简单的类,它将是通用的,但也允许对字符串成员变量进行一些描述的排序.

目前我有一个基本类,但是当我尝试实现接口成员CompareTo()时,我在顶部收到一个错误,告诉我它没有实现.这是什么问题?

@H_502_4@using System; namespace GenericsPracticeConsole.Types { class SortableGenericType<T> : IComparable { private T t; private string stringName; public T name { get { return t; } set { t = value; } } public int CompareTo(SortableGenericType<T> ourObject) { return stringName.CompareTo(ourObject.stringName); } } }

解决方法

有两个接口IComparable和IComparable< U>. IComparable是较旧的(在泛型之前出现),它要求将实例与任意对象进行比较. IComparable的< U>要求将实例与U的实例进行比较.如果要声明要比较stringName字段上的SortableGenericType实例,那么您应该这样做: @H_502_4@class SortableGenericType<T> : IComparable<SortableGenericType<T>> { // }

如果您还想实现IComparable:

@H_502_4@class SortableGenericType<T> : IComparable,IComparable<SortableGenericType<T>> { private string stringName; public T name { get; set; } public int CompareTo(SortableGenericType<T> ourObject) { //I forgot to add this statement: if(ourObject == null) return -1; return stringName.CompareTo(ourObject.stringName); } public int CompareTo(object obj) { if (obj.GetType() != GetType()) return -1; return CompareTo(obj as SortableGenericType<T>); } }

如果你的类是一个集合,它将保存类型为T的项目,并且你需要这些项目是可订购的(这不是你要求的,但这是最常见的情况),而不是你要求T为IComparable< T> :

@H_502_4@class SomeCollection<T> where T : IComparable<T> { private List<T> items; private void Sort() { // T item1; T item2; if(item1.CompareTo(item2) < 0) { //bla bla } } }

猜你在找的C#相关文章