2013-01-23 27 views
19

Nói rằng tôi có đối tượng này:Trong C#, làm cách nào để xóa thuộc tính khỏi ExpandoObject?

dynamic foo = new ExpandoObject(); 
foo.bar = "fizz"; 
foo.bang = "buzz"; 

Làm thế nào tôi sẽ loại bỏ foo.bang ví dụ?

Tôi không muốn chỉ đơn giản đặt giá trị của thuộc tính thành rỗng - vì mục đích của tôi, tôi cần phải xóa hoàn toàn. Ngoài ra, tôi nhận ra rằng tôi có thể tạo ra một ExpandoObject hoàn toàn mới bằng cách vẽ cặp kv từ lần đầu tiên, nhưng điều đó sẽ không hiệu quả.

Trả lời

28

Cast các expando để IDictionary<string, object> và gọi Remove:

var dict = (IDictionary<string, object>)foo; 
dict.Remove("bang"); 
21

Bạn có thể điều trị các ExpandoObject như một IDictionary<string, object> thay vào đó, và sau đó loại bỏ nó như vậy:

IDictionary<string, object> map = foo; 
map.Remove("Jar"); 
+0

cần phải loại bỏ các thành viên 'Jar' tạo Foo .. không Foo nó tự .., – Dhana

+1

@Dhana: Vì vậy, thay đổi 'Foo' cho 'Jar' :) Tôi đã cập nhật các ví dụ, nhưng nếu bạn hiểu cách câu trả lời là có nghĩa là để làm việc, nó không phải là khó để sửa chữa nó lên chính mình ... –

+0

@ Skeet: thực sự tốt đẹp .., cảm ơn. – Dhana

7

Bạn có thể cast nó như một IDictionary<string,object> và sau đó sử dụng phương thức Remove rõ ràng.

IDictionary<string,object> temp = foo; 
temp.Remove("bang"); 
8

MSDN Ví dụ:

dynamic employee = new ExpandoObject(); 
employee.Name = "John Smith"; 
((IDictionary<String, Object>)employee).Remove("Name"); 
Các vấn đề liên quan