.net 无法比较数组中的两个元素

.net 无法比较数组中的两个元素,.net,exception,sorting,.net,Exception,Sorting,我有一个列表,其中T是一个公开“Username”属性的类。用户名是封装字符串的自定义类型。我在这个自定义类型上实现了IComparable接口,它只返回 this.encapsulatedString.CompareTo(other.encapsulatedString) 我这样定义了列表的ICollectionView: AllUsers=CollectionViewSource.GetDefaultView(myList); 我添加了一个排序描述: AllUsers.SortDescr

我有一个
列表
,其中
T
是一个公开“Username”属性的类。用户名是封装字符串的自定义类型。我在这个自定义类型上实现了
IComparable
接口,它只返回

this.encapsulatedString.CompareTo(other.encapsulatedString)
我这样定义了列表的
ICollectionView

AllUsers=CollectionViewSource.GetDefaultView(myList);
我添加了一个排序描述:

AllUsers.SortDescriptions.Add(new SortDescription("Username",ListSortDirection.Ascending));

在这一行,代码抛出标题中所述的异常。我可以用其他方法对列表进行排序,没有问题。异常从何而来?

Stupidstupidstupid:自定义类型必须实现
IComparable
以及
IComparable
,SortDescription似乎使用了老式的非泛型版本的CompareTo


我将得到一些急需的睡眠…

正如您所说的,您需要实现非通用的
IComparable
。如果你想以一种很好的通用方式实现这个接口,你可以使用Comparer类:)

从我所知道的情况来看,你的答案并不完全正确。我的对象根本没有实现IComarable或IComparable,它们仍然可以正常工作。我正在创建一个CollectionViewSource,并像您一样添加排序描述,但没有出现此错误。我收到错误是因为排序描述中的属性为空。一旦我解决了这个问题,没有界面,一切都很好。我怀疑您的属性不正确,如果无法访问该属性,它将返回使用IComparable。

在我的例子中,我在比较函数中添加了一个try/catch块,并向控制台显示异常消息。如果比较函数中存在错误,则会出现此次要异常(“无法比较两个元素…”)


我的问题是,由于另一个错误,索引到“”字符串的位置3。

在我的例子中,排序的属性是
object
,当一些对象是
int
s,而其他对象是
string
s时,会发生错误


我本可以实现
IComparable
,但该类的使用实际上更倾向于字符串-我可以将
object
更改为
string
,并确保所有使用名为
.ToString()的数字的setter,这一切都是从那里开始设置的。

对我来说,这也是由比较函数内部的异常引起的。是的,我也遇到了这个问题。谢谢。我也是,只是实现了(T)Omg,我真是太感谢你了。这给我解决了一个大麻烦。谢谢你Sooooo muchIt很遗憾微软不能抛出一个智能且可理解的错误消息。例如,“无法比较数组中的两个元素,因为接口IComparable未实现。”