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 workingmySortedList.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; }}
}
ColinPosted Dec 18, 2008, 6:16 AM