2016-04-10 19 views
0

第一和MIN()是不一样的
最后和Max()是不一样的SortedSet的第一和MIN()是不一样的

在foreach排序为
AAA
BBB
CCC
^^

MIN()
^^

MAX()
cc

我怎样才能得到Min()和第一个是相同的?
我怎样才能得到最大()和最后是相同的?

ss.FirstOrDefault()不等于ss.Min()
ss.Reverse()FirstOrDefault()不等于ss.Max()

public void SS() 
{ 
    SortedSet<string> ss = new SortedSet<string>(StringComparer.OrdinalIgnoreCase); 
    ss.Add("bbb"); 
    ss.Add("aaa");    
    ss.Add("^^"); 
    ss.Add("ccc"); 
    foreach (string s in ss) 
     Debug.WriteLine(s); 
    Debug.WriteLine(ss.Min()); 
    Debug.WriteLine(ss.Max());     
} 

回答

3

使用ss.Min和ss.Max属性(不是方法)。

+0

使用'ss.Min'实例属性查找与'SortedSet '的结构相关的最小元素,因此尊重该集合所携带的比较器。然而,使用'ss.Min()'LINQ扩展方法忘记了有关已排序结构的所有内容,并且只是发现了与默认比较器相关的最小元素(即'Comparer .Default'),它的作用与“StringComparer.CurrentCulture '。对于“序数忽略情况”,一个“a”(U + 0061)被视为一个“A”(U + 0041),而不是“^”(U + 005E)。在你的文化中,字母大于'^'。 –

0

简短的回答是:你可以“T。

较长的答案是在最低执行here

如果你没有比较数字,代码将使用Comparer<TSource>.Default,这不能保证是你在SortedSet中使用的那个(在你的情况下不是)。

顺便说一句,如果您只是希望Min和First相同,那么在创建集时不要指定比较器。它将自动使用dafault。

+0

但我确实需要这种比较。最小和最大属性(不是方法)似乎工作。 – Paparazzi