Vì phạm vi kiểm tra (đơn vị) của tôi vẫn còn khá thấp, thật không may, tôi phải tìm nhiều lỗi theo cách khó. Vì vậy, trong quá trình tái cấu trúc, tôi phụ thuộc rất nhiều vào việc kiểm tra kiểu của trình biên dịch C#.An toàn loại an toàn()
Hôm nay, tôi đã sửa lỗi được giới thiệu trong khi tái cấu trúc bằng cách thiếu một dòng với x.Equals(aThingWrappingOriginalThing)
. Vì nó là bool Equals(object T)
, trình biên dịch không phàn nàn. Tuy nhiên, 90% thời gian tôi sử dụng trực tiếp Equals()
(thay vì thông qua BCL), tôi dự định so sánh một cách hợp lý các đối tượng cùng loại.
Bây giờ tôi tự hỏi tại sao tôi chưa bao giờ thấy ai đó quảng cáo phiên bản loại an toàn Equals()
cho các tình huống như vậy (trong C#). Có cách nào tốt nhất cho việc này không?
Tôi bị cám dỗ để sử dụng một phương pháp mở rộng cho những comparisions, như vậy:
public static bool SafeEquals<T>(this T a, T b)
{
if (a == null) return b == null;
return a.Equals(b);
}
public static bool SafeEquals<X>(this IEquatable<X> a, IEquatable<X> b)
{
if (a == null) return b == null;
return a.Equals(b);
}
những có thể được tối ưu hóa?
Dưới đây là các bài viết trên blog chỉ về chủ đề tôi thấy, đối với java: http://rickyclarkson.blogspot.com/2006/12/making-equalsobject-type-safe.html
Dưới đây là một số thông tin cơ bản về chủ đề: http://blogs.msdn.com/b/ericlippert/archive/2009/04/09/double-your-dispatch-double-your-fun.aspx – Vlad