2012-02-16 44 views

Trả lời

20

Giả sử rằng Node là một class sau đó làm như sau

Node d = o as Node; 
if (d != null) { 
    d.do_it(); 
} 

Nếu thay vào đó là một struct sau đó thử này

if (o is Node) { 
    ((Node)o).do_it(); 
} 
+0

đánh bại tôi vào nó, 1 về sự khác biệt giữa struct và class (về tính hợp lệ của 'as') –

+0

tại sao bạn không sử dụng toán tử "is" trên các kiểu tham chiếu? 'if (o là Node) {(o là Node) .do_it(); } ' –

+0

@JohnRuiz không có lý do gì bạn không thể. Trong thực tế, phương thức thứ hai sẽ làm việc bất kể Node là một cấu trúc hay một lớp – Servy

0

Bạn có thể sử dụng từ khóa is trong C#.

if (o is Node) 
{ 

} 
+7

Thực ra 'is' không truyền. 'is' chỉ kiểm tra kiểu. –

1

Nhà điều hành as trả về null nếu o không phải là một Node:

Node d = o as Node; 
if (d != null) 
{ 
    d.do_it(); 
} 
+1

Trừ khi Node là một 'struct', thì nó sẽ không biên dịch. –

+1

Nhưng xét theo mã anh ta đăng, anh ta sử dụng con trỏ, như trong các kiểu tham chiếu, như trong các lớp. Bên cạnh đó, một cấu trúc trong C# rất hiếm khi được sử dụng. –

+0

Đúng theo lý thuyết, nhưng trong C++ 'struct' và' class' có thể có con trỏ. Một 'struct' có thể được sử dụng cho một nút. –

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