В С# 3.0 вы можете создать анонимный класс со следующим синтаксисом
var o1 = new { Id = 1, Name = "Foo" };
Есть ли способ динамического создания этого анонимного класса для переменной?
Пример:
var o1 = new { Id = 1, Name = "Foo" };
var o2 = new { SQ = 2, Birth = DateTime.Now };
Динамическое создание Пример:
var o1 = DynamicNewAnonymous(new NameValuePair("Id", 1), new NameValuePair("Name", "Foo"));
var o2 = DynamicNewAnonymous(new NameValuePair("SQ", 2), new NameValuePair("Birth",
DateTime.Now));
Beacuse Мне нужно сделать:
dynamic o1 = new ExpandObject();
o1."ID" = 1; <--"ID" is dynamic name
o1."Name" = "Foo"; <--"Name" is dynamic name
И Scene1:
void ShowPropertiesValue(object o)
{
Type oType = o.GetType();
foreach(var pi in oType.GetProperties())
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
если я вызываю:
dynamic o1 = new ExpandObject();
o1.Name = "123";
ShowPropertiesValue(o1);
Он не может показать результат:
Name = 123
А также как преобразовать объект ExpandoObject в AnonymouseType?
Type type = o1.GetType();
type.GetProperties(); <--I hope it can get all property of o1
Наконец, я изменяю метод ShowPropertiesValue()
void ShowPropertiesValue(object o)
{
if( o is static object ) <--How to check it is dynamic or static object?
{
Type oType = o.GetType();
foreach(var pi in oType.GetProperties())
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
else if( o is dynamic object ) <--How to check it is dynamic or static object?
{
foreach(var pi in ??? ) <--How to get common dynamic object properties info ?
{
Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
}
}
}
Как реализовать метод DynamicNewAnonymous или как изменить ShowPropertiesValue()?
Мои мотивы:
dynamic o1 = new MyDynamic();
o1.Name = "abc";
Type o1Type = o1.GetType();
var props = o1Type.GetProperties(); <--I hope can get the Name Property
Если я могу подключить метод GetType метода dynamicObject и преобразовать Compel в строго типизированный тип. Вышеупомянутый Бесшовный код может работать нормально.