我有简单的代码,我想在其中用数组中的一些数据填充SortedList
。
namespace Test
{
class TestClass
{
public int ValueInt { get; set; }
public char ValueChar { get; set; }
}
class MainClass
{
public static void Main(string[] args)
{
int[] arr1 = { 1, 2, 3 };
char[] arr2 = { 'a', 'b', 'c' };
SortedList<TestClass, char> list = new SortedList<TestClass, char>();
for (int i = 0; i < 3; i++)
{
list.Add(new TestClass() { ValueInt = arr1[i], ValueChar = arr2[i]}, '+');
}
foreach (KeyValuePair<TestClass, char> kvp in list)
{
Console.WriteLine(
"Key1 = {0}, Key2 = {1}, Value = {2}",
kvp.Key.ValueInt, kvp.Key.ValueChar, kvp.Value
);
}
}
}
}
程序抛出错误:
System.InvalidOperationException(无法比较数组中的两个元素)
程序在该循环的第二次迭代时将其抛出:
list.Add(new TestClass() { ValueInt = arr1[i], ValueChar = arr2[i]}, '+');
如何,
如果我将SortedList
更改为Dictionary
如何使我的程序与SortedList
一起使用?
答案 0 :(得分:3)
TestClass 应该实现 IComparable 接口。
SortedList需要比较器实现来排序和 进行比较 (请参阅MS docs)
class TestClass : IComparable<TestClass>
{
public int ValueInt { get; set; }
public char ValueChar { get; set; }
public int CompareTo(TestClass other)
{
if (ReferenceEquals(this, other)) return 0;
if (ReferenceEquals(null, other)) return 1;
var valueIntComparison = ValueInt.CompareTo(other.ValueInt);
if (valueIntComparison != 0) return valueIntComparison;
return ValueChar.CompareTo(other.ValueChar);
}
}