2016-03-15 4 views
1

Я создал этот динамический объект, и я хочу, чтобы получить доступ к свойствам по имени:Доступа к динамическим свойствам объекта по имени

dynamic obj = new ExapnadoObject(); 
obj.Name = "Reza"; 

То, что я хочу, это

obj["Name"] = "Reza"; 

или

var name = obj["Name"]; 

Как я могу это сделать?

+2

'ExapnadoObject' или' ExpandoObject'? – Eser

+0

Просто добавьте его как 'IDictionary ' –

ответ

3

Проверьте определение ExpandoObject:

public sealed class ExpandoObject : IDynamicMetaObjectProvider, 
IDictionary<string, object>, ICollection<KeyValuePair<string, object>>, 
IEnumerable<KeyValuePair<string, object>>, IEnumerable, INotifyPropertyChanged 

Как вы можете видеть, один из интерфейсов реализованы по классу IDictionary<string, object>. Таким образом, вы можете сделать это:

var dict = (IDictionary<string, object>)obj; 
dict["Name"] = "Reza"; 
var name = dict["Name"] as string; 

Обратите внимание, что если все, что вам нужно, это поведение, где доступ к элементам словаря-стиль, используя ExpandoObject не является необходимым; простой Dictionary<string,object> будет делать все отлично.

2

ExpandoObject реализует IDictionary<string, object>, который позволяет сделать что-то вроде этого:

dynamic obj = new ExpandoObject(); 

IDictionary<string, object> dictionary = obj; 

dictionary["Name"] = "Reza"; 

var name = dictionary["Name"]; 
+0

Хотя ваш ответ тоже прав, но dasblinkenlight был более наглядным, и я проголосую за вас и соглашусь с этим;) – RezaRahmati

Смежные вопросы