我已经将这段代码拼凑在一起,我试图对列表进行排序,至少这是我尝试做的事情:
List<TagLib.File> listOfFiles = new List<TagLib.File>();
foreach (string file in files)
{
TagLib.File fi = TagLib.File.Create(file);
listOfFiles.Add(fi);
}
System.Linq.IOrderedEnumerable<TagLib.File> pleaseSort
= listOfFiles.OrderBy(x => x.Tag.AlbumArtists)
.ThenBy(x => x.Tag.Album);
foreach (TagLib.File tl in pleaseSort)
{
...
}
以
开头的行System.Linq.IOrderedEnumerable
让程序通过它,但是然后在每行中逐步执行代码,它返回到IOrderedEnumerable,这就是我得到以下错误的地方:
-2147024809至少有一个对象必须实现IComparable
我是第一个承认我不是专家的人,这只是我正在做的一个宠物项目,但我找不到任何明确解释什么的文档我应该在这个例子中做。任何帮助将不胜感激。
答案 0 :(得分:3)
通过对Tag.cs的源代码进行一些挖掘,这似乎是你正在使用的东西(提供这些信息会很好,很难猜测),我可以看到{{1定义为字符串数组(AlbumArtists
)。这就是问题的来源。
数组不实现string[]
。并且,如果你考虑它,它是有道理的。如果你有2个阵列,哪一个应该排在另一个阵列之前?什么是排序规则?您是对每个数组的第一项进行排序,还是应用其他排序逻辑?对于如何对数组进行排序没有明确的规则,因此无法由.NET Framework自动确定,从而导致出现错误。
基本上,为了使这项工作,你需要负担定义如何从不同的标签中排序IComparable
数组的负担。您可以通过调用重载的OrderBy方法来指定自己的IComparer实现。
或者,假设您希望排序基于AlbumArtists
数组的 first 元素,那么您可以将代码更改为仅访问第一个元素(是可比的),它应该工作正常(只要每个标签在阵列中至少有一个专辑艺术家):
AlbumArtists