Tôi vẫn còn mới đối với các nhà khai thác quá tải. Tôi nghĩ rằng tôi đã làm một công việc tuyệt vời cho đến khi tôi nhấn vấn đề này. NullReferenceException được ném vào toán tử! =. Tôi giả sử nó sử dụng nó trong phương pháp CompareTo nhưng tôi không hoàn toàn chắc chắn. Nếu bất cứ ai có thể chỉ cho tôi đúng hướng tôi sẽ rất biết ơn.Làm thế nào để ghi đè đúng cách bình đẳng?
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");
}
}
}
Khi tôi nhận xét các toán tử băm, chương trình hoạt động như dự định. Câu hỏi của tôi là làm thế nào tôi có thể bảo vệ các nhà khai thác nhị phân của tôi từ tài liệu tham khảo null để tôi có thể giữ chúng để so sánh thủ công? Cảm ơn bạn đã dành thời gian.
Một trong các đối tượng 'Task' mà bạn đang so sánh với'! = 'Được đặt thành' null'. – dasblinkenlight
Phải-o .. Bạn cần giả sử 't1' và/hoặc' t2' có thể là rỗng trong tất cả các hàm tĩnh đó. –