I am trying to implement a sorted list. I created a class that I want to keep in the list, but for some reason, when I try to start sorting the sort method, I get an exception. It seems like something behind the scenes is passing in a null reference to the CompareTo method that I implemented.
Here is what I find relevant code.
A data object is defined as follows:
namespace PrioritisedRequestQueue { public class XactTask : IComparable<XactTask> { public int priority; public DateTime submitted; public string name; public XactTask( int priority, DateTime submitted, string name) { this.priority = priority; this.submitted = submitted; this.name = name; } public int CompareTo(XactTask rhs ) {
And the class for storing the list is defined as follows:
namespace PrioritisedRequestQueue { public class Class1 { public List<XactTask> tasks; public Class1() { tasks = new List<XactTask>(); } public void sort() { tasks.Sort(); } public void add(XactTask task) { tasks.Add(task); } } }
Here is the program I use for testing:
PrioritisedRequestQueue.Class1 tester = new PrioritisedRequestQueue.Class1(); tester.add(new PrioritisedRequestQueue.XactTask(1, DateTime.Now, "test1")); tester.add(new PrioritisedRequestQueue.XactTask(1, DateTime.Now, "test2")); Console.WriteLine(tester.tasks[0].name); Console.WriteLine(tester.tasks[1].name); tester.tasks.Sort();
Test program output:
comparing 1to 1 Entered first if comparing 16/05/2011 14:41:57to 16/05/2011 14:41:57 Entered second if comparing 1to 1 Entered first if comparing 16/05/2011 14:41:57to 16/05/2011 14:41:57 Entered second if comparing 1to 1 Entered first if comparing 16/05/2011 14:41:57to 16/05/2011 14:41:57 Entered second if comparing 1to 1 Entered first if comparing 16/05/2011 14:41:57to 16/05/2011 14:41:57 Entered second if
Then it seems to pass the null rhs object to the comparison method, and I get a NullReferenceException when it tries to access the rhs priority.
Can you tell me why this is happening and what should I do to solve this problem?
Please let me know if you need more information.