2012-05-11 41 views
29

Tôi muốn kiểm tra xem một đối tượng không thuộc một loại cụ thể nào. Tôi biết làm thế nào để kiểm tra xem một cái gì đó của một loại đặc biệt:Làm cách nào để kiểm tra xem đối tượng có thuộc loại cụ thể không?

if (t is TypeA) 
{ 
    ... 
} 

nhưng

if (t isnt TypeA) 
{ 
    ... 
} 

không hoạt động.

+22

+1: Làm tôi cười khúc khích :-) –

+3

Vâng chơi Sachin ... ngày chậm tại nơi làm việc? : D – svinja

+0

Không, không, rất nhiều việc phải làm. Tôi muốn làm một kiểm tra "không thuộc loại" và nhận ra rằng tôi không thể làm điều đó. –

Trả lời

40

C# không phải là ngôn ngữ khá tự nhiên;) Sử dụng này một

if(!(t is TypeA)) 
{ 
    ... 
} 
+7

Không cần phải thử, nó sẽ hoạt động :) – Jon

+3

@Jon thay đổi 'Thử' -> 'Sử dụng' –

9

nếu bạn muốn không chỉ séc, bạn có thể sử dụng as điều hành.

var a = t as TypeA; 
if(a!= null) 
    //use a.. 

Bằng cách này, nếu bạn muốn sử dụng một loại sau khi kiểm tra, bạn tránh được đúc đôi ..

+0

I không nghĩ rằng điều này hoạt động nếu một là null trước khi diễn viên. – Bochu

+0

@ Bochu: nó vẫn sẽ hoạt động, nhưng bất chấp điều đó, nó nằm ngoài câu hỏi về câu trả lời của tôi. 'a' được khởi tạo như bạn thấy. – Tigran

4

Nếu bạn đang làm một TypeA x = (TypeA)t; bên trong nếu khối sau đó một cách tốt hơn là

TypeA x = t as TypeA 
if(x != null) 
{ 
... 
} 

Điều này chỉ gây ra một lần kiểm tra loại thay vì hai lần.

2

tôi thường dính vô giá trị và gõ kiểm tra tất cả trong một dòng:

if (t == null || !(t is TypeA)) { 
    ... 
} 

Nếu TypeA là một cấu trúc, bạn sẽ cần phải xử lý nó hơi khác một lần nữa:

if (t == null || t.GetType() != typeof(TypeA)) { 
    ... 
} 
0

Kiểm tra dưới đây ví dụ cho getType():

object obj = new object(); 
obj.GetType(); 

string s; 
s.GetType(); 

List<string> StringList = new List<string>(); 
StringList.GetType(); 
+2

Chỉ liên kết câu trả lời không hiệu quả ở đây. Vui lòng chỉnh sửa câu trả lời của bạn bằng mã có liên quan để mọi người dễ dàng đọc nội dung quan trọng hơn đối với chủ đề. – dachi

2

Phương pháp mở rộng để giải cứu !!

public static class ObjectExtensions 
{ 
    public static bool Isnt(this object source, Type targetType) 
    { 
     return source.GetType() != targetType; 
    } 
} 

Cách sử dụng

if (t.Isnt(typeof(TypeA))) 
{ 
    ... 
} 
+0

Tôi đã làm điều này, nhưng tôi cũng đã tạo một phần mở rộng của "IS" cũng như vậy để mã trông tương tự -e.g. t.IsA (xxx), t.IsNotA (xxx). vâng tôi biết nó không cần thiết, nhưng nó có vẻ tốt hơn cho tôi. – harag

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