2009-08-27 28 views
6
if(myVariable is SomeType) 

Không có gì ngoài sự tò mò, điều trái ngược với điều đó là gì? Tôi muốn làm điều gì đó như:Ngược lại với "is" là gì?

if(!myVariable is SomeType) 
if(myVariable is not SomeType) 

Không biên dịch.

Cho rằng "là" là từ không thể tìm kiếm được trong hầu hết các công cụ, đây là một câu khó để tìm câu trả lời.

trùng lặp:

C# : ‘is’ keyword and checking for Not

+0

Thông thường bạn vẫn có thể tìm kiếm "là" trong công cụ tìm kiếm nếu bạn thực hiện * + "là" * trong truy vấn tìm kiếm của mình bằng cách yêu cầu đối sánh. – Alex

+3

không phải là tất nhiên – DLauer

Trả lời

28

Hãy thử

if (!(myVariable is SomeType)) 
+0

The! nên ở trong khung. if (! (myVariable is SomeType) – Brandon

+0

Đó là câu trả lời đúng – Maciek

2

Tôi không ở phía trước của một trình biên dịch ngay bây giờ vì vậy không thể kiểm tra, nhưng sẽ không

if (!(myVariable is SomeType)) 

hoạt động?

7

Bạn cần bao quanh câu lệnh trong dấu ngoặc đơn.

if (!myVariable is SomeType) 

Dòng đó áp dụng toán tử NOT cho myVariable, chứ không phải toàn bộ câu lệnh. Hãy thử:

if (!(myVariable is SomeType)) 

Mặc dù, tôi sẽ cảnh giác với mã kiểm tra đối tượng theo kiểu của nó. Bạn có thể muốn xem xét khái niệm đa hình.

+1

+1 cho nhận xét đa hình Có lẽ Deane không cần nó, nhưng chắc chắn là rất hay khi đề cập đến nó gần mã như thế này –

+0

Nó khá phổ biến để kiểm tra để xem một đối tượng có thuộc loại nào đó không. Cấu trúc foreach thực hiện nó để xem liệu điều tra viên có triển khai IDisposable hay không. –

+0

nó không phải là khá phổ biến trong mã của bạn mặc dù. Không có nhiều nhiệm vụ trong C# sẽ yêu cầu sử dụng kiểm tra loại một cách rõ ràng thay vì sử dụng đa hình. Tôi không nói rằng nó không hợp lệ trong một số tình huống, nhưng nó không phải là "phổ biến". –

4

Jay và marc có jist của nó. Ngoài ra, bạn có thể làm:

var cast = myVariable as SomeType; 
if(cast == null) 
{ 
    // myVariable is not SomeType 
} 

Lợi ích của phương pháp này là bây giờ bạn đã có một biến đã được sử dụng làm SomeType ngay lập tức để sử dụng.

0

Hoặc làm thế nào về một phần mở rộng chung chung? Tôi thích cách này để tránh có quá nhiều dấu ngoặc đơn.

Vì vậy, bạn có:

if (!MyObject.Is<string>()) 
    //Do blah blah blah 

Sử dụng:

public static class ObjectExtensions 
{ 
    public static bool Is<T>(this object ToEvaluate) 
    { 
     return ToEvaluate is T; 
    } 
} 

Mà dường như dễ dàng hơn để đọc quá.

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