C# Isn';不可比较?

C# Isn';不可比较?,c#,win-universal-app,sorteddictionary,C#,Win Universal App,Sorteddictionary,当我在C#中编码时,我在代码中使用System.Collections.Generic.SortedDictionary。 但是当我调用它的Max()方法时,它会抛出一个异常: mscorlib.ni.dll中发生“System.ArgumentException”类型的异常,但未在用户代码中处理 附加信息:至少一个对象必须实现IComparable Char是否实现了IComparable?我怎样才能解决它 谢谢 Ps:我的代码很简单: SortedDictionary<char,int

当我在C#中编码时,我在代码中使用
System.Collections.Generic.SortedDictionary
。 但是当我调用它的
Max()
方法时,它会抛出一个异常:

mscorlib.ni.dll中发生“System.ArgumentException”类型的异常,但未在用户代码中处理

附加信息:至少一个对象必须实现IComparable

Char
是否实现了
IComparable
?我怎样才能解决它

谢谢

Ps:我的代码很简单:

SortedDictionary<char,int> letter = new SortedDictionary<char,int>;
//some codes
    if (letter.Count != 0) var First = letter.Max();
SortedDictionary字母=新的SortedDictionary;
//一些代码
如果(letter.Count!=0)var First=letter.Max();
Max()
IEnumerable
的扩展方法,并且
SortedDictionary
实现
IEnumerable

问题是
KeyValuePair
不可
i比较

如果需要最大密钥,可以使用
密钥
属性:

SortedDictionary<char, int> dict = new SortedDictionary<char, int>();
...

var key = dict.Keys.Max();
var value = dict[key];
SortedDictionary dict=新的SortedDictionary();
...
var key=dict.Keys.Max();
var值=dict[键];
编辑:

如果要计算字符重复的次数,请不要使用
SortedDictionary
,添加到集合中的每个元素都需要O(logn)。最后,添加过程将进行O(n logn)操作

在您的情况下,简单的
字典
或数组更合适:

var dict = new Dictionary<char, int>();

foreach (char c in chars)
{
    if (!dict.ContainsKey(c))
        dict[c] = 0;

    dict[c]++;
}

var maxValue = dict.Values.Max();
var keyValues = dict.Where(kv => kv.Value == maxValue);
var dict=newdictionary();
foreach(字符中的字符c)
{
如果(!dict.ContainsKey(c))
dict[c]=0;
dict[c]++;
}
var maxValue=dict.Values.Max();
var keyValues=dict.Where(kv=>kv.Value==maxValue);
在上面的代码中,您可以找到最大计数,然后找到具有该值的字符。

max()
IEnumerable
SortedDictionary
的扩展方法

问题是
KeyValuePair
不可
i比较

如果需要最大密钥,可以使用
密钥
属性:

SortedDictionary<char, int> dict = new SortedDictionary<char, int>();
...

var key = dict.Keys.Max();
var value = dict[key];
SortedDictionary dict=新的SortedDictionary();
...
var key=dict.Keys.Max();
var值=dict[键];
编辑:

如果要计算字符重复的次数,请不要使用
SortedDictionary
,添加到集合中的每个元素都需要O(logn)。最后,添加过程将进行O(n logn)操作

在您的情况下,简单的
字典
或数组更合适:

var dict = new Dictionary<char, int>();

foreach (char c in chars)
{
    if (!dict.ContainsKey(c))
        dict[c] = 0;

    dict[c]++;
}

var maxValue = dict.Values.Max();
var keyValues = dict.Where(kv => kv.Value == maxValue);
var dict=newdictionary();
foreach(字符中的字符c)
{
如果(!dict.ContainsKey(c))
dict[c]=0;
dict[c]++;
}
var maxValue=dict.Values.Max();
var keyValues=dict.Where(kv=>kv.Value==maxValue);


在上面的代码中,您可以找到最大计数,然后找到具有该值的字符。

您究竟如何调用
max()
?很明显。问题在于您编写代码的方式——因此:显示您的代码。
var c=new[]{'a','b'};c.Max()工作正常。直接测试
Char ch='A';布尔结果=ch是i可比较的返回
true
@jeroenvanevel我已经更新了我的问题并添加了代码。谢谢你的帮助!你到底怎么调用
Max()
?很明显。问题在于您编写代码的方式——因此:显示您的代码。
var c=new[]{'a','b'};c.Max()工作正常。直接测试
Char ch='A';布尔结果=ch是i可比较的返回
true
@jeroenvanevel我已经更新了我的问题并添加了代码。谢谢你的帮助!非常感谢。实际上,我想得到一对具有最大值的。我怎么做@黄煜恒: SortedDictionary是按键排序的,实际上获取最大值或最小值的最佳方法是使用
Last()
First()
,因为集合已经排序。但是,如果您想通过最大值获取该对,可以使用dict.Values:
var value=dict.Values.Max()和键:var key=
dict.Keys.First(k=>dict[k]==value)
但是如果这是您想要的,那么使用字典,比如
SortedDictionary
,使用您的实际值作为键。我的目的是计算特定的
char
在一篇文章中出现的次数(使用
int
)。因此,如果我使用
int
作为键,可能会有许多相同的
int
,我认为在
SortedDictionary
中不能复制键。或者你能告诉我其他更适合我的数据结构吗@黄煜恒: 更新的回答我应该支持utf-8,所以我认为
字典
更适合我。但是我不能理解
字典
分类字典
之间的区别。为什么
字典
更合适?谢谢!实际上,我想得到一对具有最大值的。我怎么做@黄煜恒: SortedDictionary是按键排序的,实际上获取最大值或最小值的最佳方法是使用
Last()
First()
,因为集合已经排序。但是,如果您想通过最大值获取该对,可以使用dict.Values:
var value=dict.Values.Max()和键:var key=
dict.Keys.First(k=>dict[k]==value)
但是如果这是您想要的,那么使用字典,比如
SortedDictionary
,使用您的实际值作为键。我的目的是计算特定的
char
在一篇文章中出现的次数(使用
int
)。因此,如果我使用
int
作为键,可能会有许多相同的
int
,我认为在
SortedDictionary
中不能复制键。或者你能告诉我其他更适合我的数据结构吗@黄煜恒: 更新的回答我应该支持utf-8,所以我认为
字典
更适合我。但是我不能理解
字典
分类字典
之间的区别。为什么