Todavía soy nuevo en los operadores de sobrecarga. Pensé que estaba haciendo un gran trabajo hasta que llegue a este problema. NullReferenceException se lanza en el operador! =. Supongo que está usándolo en el método CompareTo, pero no estoy del todo seguro. Si alguien puede señalarme en la dirección correcta, estaría muy agradecido.¿Cómo anular correctamente la igualdad?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
List<Task> tasks = new List<Task>();
tasks.Add(new Task("first", DateTime.Now.AddHours(2)));
tasks.Add(new Task("second", DateTime.Now.AddHours(4)));
tasks.TrimExcess();
tasks.Sort();
}
}
public class Task : IComparable
{
public Task()
{
}
public Task(string nameIn, DateTime dueIn)
{
nameOfTask = nameIn;
dateDue = dueIn;
}
DateTime dateDue;
string nameOfTask;
public static bool operator <(Task t1, Task t2)
{
return (t1.dateDue < t2.dateDue);
}
public static bool operator >(Task t1, Task t2)
{
return (t1.dateDue > t2.dateDue);
}
public static bool operator ==(Task t1, Task t2)
{
return (t1.dateDue == t2.dateDue);
}
public static bool operator !=(Task t1, Task t2)
{
return (t1.dateDue != t2.dateDue);
}
public override int GetHashCode()
{
return Int32.Parse(this.dateDue.ToString("yyyymmddhhmmss"));
}
public override bool Equals(System.Object obj)
{
if (obj == null) return false;
Task t = obj as Task;
if ((System.Object)t == null) return false;
return (this.dateDue == t.dateDue);
}
int IComparable.CompareTo(object obj)
{
if (obj == null) return 1;
Task t = obj as Task;
if (t != null)
{
return this.dateDue.CompareTo(t.dateDue);
}
else
throw new ArgumentException("Object is not a Task");
}
}
}
Cuando comento los operadores de binaory, el programa funciona según lo previsto. Mi pregunta es ¿cómo puedo proteger mis operadores binarios de las referencias nulas para poder guardarlas para las comparaciones manuales? Gracias por su tiempo.
Uno de los objetos 'Task' que está comparando con'! = 'Está establecido en' null'. – dasblinkenlight
Right-o .. Debe suponer que 't1' y/o' t2' pueden ser nulos en todas esas funciones estáticas .. –