2011-07-03 22 views
12

Tôi có một tình huống mà tôi cần phải so sánh các loại nullable.
Giả sử bạn có 2 giá trị:Tạo phương thức mở rộng có thể vô hiệu hóa <T>, bạn làm cách nào?

int? foo=null; 
int? bar=4; 

này sẽ không làm việc:

if(foo>bar) 

Các công trình sau đây nhưng rõ ràng không cho phép NULL như chúng ta hạn chế nó để kiểu giá trị:

public static bool IsLessThan<T>(this T leftValue, T rightValue) where T : struct, IComparable<T> 
{ 
     return leftValue.CompareTo(rightValue) == -1; 
} 

Công trình này không hoạt động chung:

public static bool IsLessThan(this int? leftValue, int? rightValue) 
{ 
    return Nullable.Compare(leftValue, rightValue) == -1; 
} 

Làm cách nào để tạo phiên bản Generic của IsLessThan?

Thanks a lot

+2

do đó, bạn muốn vô < 4 or null > 4? –

Trả lời

16

Hãy thử điều này:

public static bool IsLessThan<T>(this Nullable<T> t, Nullable<T> other) where T : struct 
{ 
    return Nullable.Compare(t, other) < 0; 
} 
+0

+1 Chỉ cần về để đăng một cái gì đó tương tự, đánh bại tôi với nó. –

+3

Bạn có thể muốn trả lại giá trị đọc Nullable.Compare (t, khác) <0 để tuân thủ tài liệu So sánh. Phương thức So sánh được cho là trả lại giá trị nhỏ hơn 0 cho "ít hơn trường hợp". http://msdn.microsoft.com/en-us/library/dxxt7t2a.aspx – PHeiberg

+0

Cảm ơn mẹo, đã chỉnh sửa. –

1

Nó có thể được đơn giản hóa:

public static bool IsLessThan<T>(this T? one, T? other) where T : struct 
{ 
    return Nullable.Compare(one, other) < 0; 
} 
Các vấn đề liên quan