I thought I would be tricky and force the SortedList to not sort using a custom IComparer, I used the following code, but when the list is sorting using the custom sort the accessors become unusable and throw exceptions. I have since discovered that the accessors use the IComparer to find things and since it is set at -1 it gets a null return value, however the foreach loops dont use it. I must preserve the insert order, I don't want the sortinglist to sort, is there any way or type to accomplish this? A ListDictionary does not have the accessors I need. I also need it to be Case-Sensitive meaning for keys I have some that are 'r99' and 'R99' and that they are not the same. (Loading and XML file and XML is Case-Sensitive)
Thanks
Sample Application:
Thanks
Sample Application:
Code:
using System; using System.Collections; namespace Example { // An implementation of IComparer. public class Int32ComparerClass : IComparer { public int Compare(object x, object y) { // This code assumes neither x and y are null, // and they both can be successfully converted to Int32s. //return Convert.ToInt32(x) - Convert.ToInt32(y); return -1; } } public class Test { [STAThread] public static void Main() { SortedList numericList = new SortedList(new Int32ComparerClass()); numericList.Add("10", "Ten"); numericList.Add("11", "Eleven"); numericList.Add("1", "One"); numericList.Add("2", "Two"); numericList.Add("3", "Three"); numericList.Add("0", "0"); numericList.Add("r99", "r99"); numericList.Add("R99", "R99"); foreach (DictionaryEntry de in numericList) Console.WriteLine(de.Key + ", " + de.Value); //WILL THROW EXCEPTION Console.WriteLine(numericList["1"].ToString()); Console.WriteLine(); SortedList xxx = new SortedList(); xxx.Add("10", "Ten"); xxx.Add("11", "Eleven"); xxx.Add("1", "One"); xxx.Add("2", "Two"); xxx.Add("3", "Three"); xxx.Add("0", "0"); xxx.Add("r99", "r99"); xxx.Add("R99", "R99"); foreach (DictionaryEntry de in xxx) Console.WriteLine(de.Key + ", " + de.Value); //IS OK Console.WriteLine(xxx["1"].ToString()); } } }
Comment