2010-10-26 2 views
37

Я хочу создать анонимный тип, чтобы динамически установить имя свойства. он не должен быть анонимным. Все, что я хочу достичь, задает динамические имена свойств объектов. Это может быть ExpandoObject и т. Д. Но словарь не будет работать для меня. Каковы ваши предложения? спасибо большоеДинамическое создание анонимного типа?

+0

Почему словарь не работает для вас? – dtb

+2

Мне нужно привязать его к источнику данных сетки telerik, а также динамически добавлять столбцы сетки. – ward87

ответ

41

Только ExpandoObject может иметь динамические свойства.

Edit: Вот пример Expand Object использования (из его описания MSDN):

dynamic sampleObject = new ExpandoObject(); 
sampleObject.TestProperty = "Dynamic Property"; // Setting dynamic property. 
Console.WriteLine(sampleObject.TestProperty); 
Console.WriteLine(sampleObject.TestProperty .GetType()); 
// This code example produces the following output: 
// Dynamic Property 
// System.String 

dynamic test = new ExpandoObject(); 
((IDictionary<string, object>)test).Add("DynamicProperty", 5); 
Console.WriteLine(test.DynamicProperty); 
+0

Да, я знаю об этом. но могу ли я установить свойство ExpandoObjects из массива строк, например? – ward87

+5

... ну или любой другой тип, реализующий 'IDynamicMetaObjectProvider'. –

+3

ExpandoObject реализует 'IDictionary ', так что да, вы можете рассматривать его как словарь для его заполнения. – stevemegson

29

Вы можете бросить ExpandoObject в словарь и заполнить его таким образом, то ключи, которые вы установили будет отображаются как имена свойств в ExpandoObject ...

dynamic data = new ExpandoObject(); 

IDictionary<string, object> dictionary = (IDictionary<string, object>)data; 
dictionary.Add("FirstName", "Bob"); 
dictionary.Add("LastName", "Smith"); 

Console.WriteLine(data.FirstName + " " + data.LastName); 
+0

+1 Это довольно дико, и я не знал, что у этой динамики есть такая возможность. Другие языки имеют схожие возможности, и это, безусловно, будет иметь несколько отличных вариантов использования. С другой стороны, его также можно было бы злоупотреблять довольно ужасно, и его следует использовать с должным уважением. – AaronLS

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