I have the following code I am writing just to learn generic collections and for some reason it fails to compare when adding a second element to my sorted list. You'll see I perform a manual comparison at the top of my code and this is successful. I have implemented IComparer with the accompanying Int Compare() method. Any ideas where I am going wrong?
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
namespace
WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
SortedList<KeyClass, string> mySortedList = new SortedList<KeyClass, string>();
//This works
#region
working comparison code
KeyClass test1 = "E";
Console.WriteLine(test1.MyTestData);
KeyClass test2 = "A";
Console.WriteLine(test2.MyTestData);
Console.WriteLine(test1.Compare(test1, test2).ToString());
#endregion
//This throws a cannot compare elements style exception
//when adding the second element
#region
not working
mySortedList.Add(
"E", "five");
mySortedList.Add(
"A", "one");
mySortedList.Add(
"C", "three");
mySortedList.Add(
"F", "six");
mySortedList.Add(
"B", "two");
mySortedList.Add(
"D", "four");
foreach (string myValue in mySortedList.Values) Console.WriteLine(myValue);
#endregion
}
}
//My Custom key class
public struct KeyClass : IComparer<KeyClass>
{
private string myTestData;
public string MyTestData { get { return myTestData; } }
public KeyClass(string myTestData) { this.myTestData = myTestData; }
public int Compare(KeyClass Class1, KeyClass Class2)
{
return string.Compare(Class1.MyTestData, Class2.MyTestData);
}
public static implicit operator KeyClass(string s) { return new KeyClass(s); }
public static implicit operator string(KeyClass k) { return k.MyTestData; }
}
}