Theo tài liệu Constraints on Type Parameters (C# Programming Guide) nó nói, và tôi trích dẫn:Tránh các toán tử == và! = Trên các tham số kiểu generic, nhưng nó có thể so sánh với null không?
Khi áp dụng những nơi T: lớp hạn chế, tránh == và = nhà khai thác trên các tham số loại vì các nhà khai thác sẽ kiểm tra cho tham khảo! chỉ danh tính, không phải cho giá trị bình đẳng. Đây là trường hợp ngay cả nếu các toán tử này bị quá tải trong một loại được sử dụng làm đối số . Đoạn mã sau minh họa điểm này; đầu ra là sai mặc dù lớp String quá tải toán tử ==.
Với ví dụ sau:
public static void OpTest<T>(T s, T t) where T : class
{
System.Console.WriteLine(s == t);
}
static void Main()
{
string s1 = "target";
System.Text.StringBuilder sb = new System.Text.StringBuilder("target");
string s2 = sb.ToString();
OpTest<string>(s1, s2);
}
Tuy nhiên, ReSharper (Tôi vừa mới bắt đầu sử dụng các phiên bản demo/thử nghiệm để xem nếu nó là bất kỳ giá trị với tôi) đưa ra một gợi ý/mũi để làm null-kiểm tra các thông số như sau:
public Node(T type, Index2D index2D, int f, Node<T> parent)
{
if (type == null) throw new ArgumentNullException("type");
if (index2D == null) throw new ArgumentNullException("index2D");
if (parent == null) throw new ArgumentNullException("parent");
}
(T bị hạn chế với where T : class, new()
)
tôi có thể một cách an toàn theo ReSha rper mà không gặp phải vấn đề mà tài liệu C# đang cố gắng bảo tôi tránh?
Và nếu bạn ném chuỗi ký tự vào trong hỗn hợp, bạn sẽ nhận được kết quả không thể đoán trước. – SWeko