Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法按c中的标记进行排序#_C#_Sorting_Mp3 - Fatal编程技术网

C# 无法按c中的标记进行排序#

C# 无法按c中的标记进行排序#,c#,sorting,mp3,C#,Sorting,Mp3,我正在尝试按艺术家和唱片集对一组mp3文件进行排序。在这样做的过程中,我遇到了两种说法;一个有效,一个无效。我的印象是,要做这两种我想做的事,我所要做的就是一个接一个地使用它们,但我不能这样做,因为其中一个不起作用。请参见下面的我的代码: foreach (string file in files) { TagLib.File fi = TagLib.File.Create(file); listOfFiles.Add(fi); } List<TagLib.File>

我正在尝试按艺术家和唱片集对一组mp3文件进行排序。在这样做的过程中,我遇到了两种说法;一个有效,一个无效。我的印象是,要做这两种我想做的事,我所要做的就是一个接一个地使用它们,但我不能这样做,因为其中一个不起作用。请参见下面的我的代码:

foreach (string file in files)
{
    TagLib.File fi = TagLib.File.Create(file);
    listOfFiles.Add(fi);
}
List<TagLib.File> sortedByBand = listOfFiles.OrderBy(o =>
o.Tag.AlbumArtists).ToList();
List<TagLib.File> sortedBy = listOfFiles.OrderBy(o => 
o.Tag.AlbumArtists).ToList();
foreach(文件中的字符串文件)
{
TagLib.File fi=TagLib.File.Create(文件);
文件列表。添加(fi);
}
List sortedByBand=listOfFiles.OrderBy(o=>
o、 Tag.AlbumArtists).ToList();
List sortedBy=listOfFiles.OrderBy(o=>
o、 Tag.AlbumArtists).ToList();
列表“sortedByBand”及其附带的排序结果如下:附加信息:至少一个对象必须实现IComparable。
提前感谢您提供的所有帮助。

看起来
AlbumArtisters
是某种枚举(类似于字符串数组),无法与其他实例进行比较,因此
listOfFiles
无法按其排序

在这种情况下,您必须将
AlbumArtists
转换为可以与其他实例进行比较的内容。例如,字符串:

List<TagLib.File> sortedByBand = listOfFiles.OrderBy(o =>
String.Join(";", o.Tag.AlbumArtists)).ToList();
List-sortedByBand=listOfFiles.OrderBy(o=>
String.Join(“;”,o.Tag.AlbumArtisters)).ToList();

当然,这假设艺术家的MP3将出现在艺术家的MP3之前。为了避免这种情况,您需要在转换为单个字符串之前对艺术家列表本身进行排序。希望这有帮助

我认为您的方法可能不会产生正确的结果,您不应该进行双重排序,我认为LINQ提供了一个扩展来进行排序,因为您使用字符串数组作为排序元素,因此您会遇到错误。我不确定是否可能,但基于其他建议,您可以尝试

///  sort the array inside the tag.

    listOfFiles.ForEach(x =>Array.Sort(o.Tag.AlbumArtists));
///if this does not work try other suggestion 
    List<TagLib.File> sortedByBand=listOfFiles.OrderBy(o =>o.Tag.AlbumArtists.FirstOrDefault()).ToList();
///对标记内的数组进行排序。
ForEach(x=>Array.Sort(o.Tag.AlbumArtisters));
///如果这不起作用,尝试其他建议
List sortedByBand=listOfFiles.OrderBy(o=>o.Tag.AlbumArtisters.FirstOrDefault()).ToList();

所以。。。什么有效,什么无效?它以什么方式不起作用?怎么了?我看不出这两种说法有什么不同。你是说一个有效,一个无效?代码:List-sortedByBand=listOfFiles.OrderBy(o=>o.Tag.AlbumArtisters).ToList();给出错误:其他信息:至少一个对象必须实现IComparable。是的,这两个代码片段非常相似,因此我需要在这里发布,因为我不理解为什么一个有效,而另一个无效。
AlbumArtisters
的数据类型是什么?它位于mp3文件的TagLib程序集中,我相信它是一个字符串数组。