3

我正在尝试获得一个独特的、按字母顺序排列的行业名称(字符串)列表。这是我的代码:

HashSet<string> industryHash = new HashSet<string>();
List<string> industryList = new List<string>();
List<string> orderedIndustries = new List<string>();

// add a few items to industryHash

industryList = industryHash.ToList<string>();
orderedIndustries = industryList.Sort(); //throws compilation error

最后一行抛出编译错误:“无法将类型'void'隐式转换为'System.Collections.Generic.List”

我究竟做错了什么?

4

5 回答 5

5

List.Sort对原始列表进行排序并且不返回新列表。所以要么使用这种方法,要么Enumerable.OrderBy + ToList

高效的:

industryList.Sort();

效率较低:

industryList = industryList.OrderBy(s => s).ToList();
于 2013-06-11T15:04:50.493 回答
3

排序是一个 void 方法,您不能从该方法中检索值。你可以看看这篇文章

您可以使用OrderBy()对您的列表进行排序

于 2013-06-11T15:03:41.703 回答
1

做这个 :

HashSet<string> industryHash = new HashSet<string>();
List<string> industryList = new List<string>();

// add a few items to industryHash

industryList = industryHash.ToList<string>();
List<string> orderedIndustries = new List<string>(industryList.Sort()); 

注意:不要保留未排序的列表,所以只做行业列表.Sort() 没有真正意义

于 2013-06-11T15:05:33.340 回答
1

它对列表进行就地排序。如果您想要副本,请使用OrderBy.

于 2013-06-11T15:03:35.707 回答
0

一种选择是使用 LINQ 并删除industryList

HashSet<string> industryHash = new HashSet<string>();
//List<string> industryList = new List<string>();
List<string> orderedIndustries = new List<string>();

orderedIndustries = (from s in industryHash
                     orderby s
                     select s).ToList();
于 2013-06-11T15:11:46.510 回答