2011-07-31 32 views
5

Tôi muốn kiểm tra xem một loại có hỗ trợ IComparable trước khi sắp xếp nó hay không, nhưng tôi thấy rằng việc kiểm tra xem một loại có hỗ trợ giao diện IComparable bằng cách sử dụng "is" không phải lúc nào cũng trả lời đúng cho tôi hay không. Ví dụ, typeof(int) is IComparable trả về false, mặc dù int không hỗ trợ giao diện IComparable.Làm cách nào để sử dụng "is" để kiểm tra xem một loại có hỗ trợ IComparable không?

Tôi lưu ý rằng typeof(int).GetInterfaces() danh sách IComparable và typeof(int).GetInterface("IComparable") trả về loại IComparable, vậy tại sao "is" không hoạt động như tôi mong đợi?

+0

Thông số 'is' nói nó trả về đúng khi chuyển đổi sẽ không ném ngoại lệ. thử chuyển đổi 'int' thành' IComparable' và xem có gặp rắc rối nào không. – Dani

Trả lời

10

is công trình trên một ví dụ. Khi bạn nói typeof(int) is IComparable, thì bạn thực sự kiểm tra xem loại System.Type có thực hiện IComparable không. Để sử dụng is, bạn phải sử dụng một ví dụ:

bool intIsComparable = 0 is IComparable; // true 
5

Các int không hỗ trợ IComparable nhưng kiểu int không, đó là nó, bạn nên kiểm tra biến bản thân không Type của nó, vì vậy:

int foo = 5; 
foo is IComparable;//the result is true, but of course it will not be true if you check typeof(foo) 
2

Nhà điều hành is hy vọng một thể hiện ở phía bên trái:

int i = 1; 
if (i is IComparable) ... 

biên dịch (với một Cảnh báo về luôn là true).

Và "false typeof(int) is IComparable lợi nhuận"

Đó là bởi vì bạn đang tự hỏi liệu (một thể hiện của) lớp Type là IComparable. Không phải vậy.

Các vấn đề liên quan