List<dynamic> dyList = new List<dynamic>();
PropertyInfo[] peroperties = typeof(PersonalEventEntity).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetField | BindingFlags.SetField);
//foreach (PersonalEventEntity pe in eventList)
//{
// dynamic dpe = new System.Dynamic.ExpandoObject();
// dpe.Resources = new ResourceCollection();
// dpe.Resources.Add(new Resource { Type = "Calendar", Key = pe.GroupList != null && pe.GroupList.Count > 0 ? 2 : 1 });
// foreach (PropertyInfo property in peroperties)
// {
// ((IDictionary<string, object>)dpe).Add(property.Name, property.GetValue(pe, null));
// }
// dyList.Add(dpe);
PropertyInfo[] peroperties = typeof(PersonalEventEntity).GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetField | BindingFlags.SetField);
//foreach (PersonalEventEntity pe in eventList)
//{
// dynamic dpe = new System.Dynamic.ExpandoObject();
// dpe.Resources = new ResourceCollection();
// dpe.Resources.Add(new Resource { Type = "Calendar", Key = pe.GroupList != null && pe.GroupList.Count > 0 ? 2 : 1 });
// foreach (PropertyInfo property in peroperties)
// {
// ((IDictionary<string, object>)dpe).Add(property.Name, property.GetValue(pe, null));
// }
// dyList.Add(dpe);
//}
一下内容为转载:
http://www.cnblogs.com/timy/archive/2010/08/28/1811152.html
本篇文章中就ExpandoObject的基本使用进行一些demo。我们几乎都知道dynamic特性是.net 4.0中一个主要的新特性,而ExpandoObject正是这样的一个动态的类型。ExpandoObject允许我们在实例化之后在运行时进行成员的增加、删除。下面我们来看下基本的使用:
Adding Members
1)实例化
如果需要延迟绑定的话,我们需要用dynamic来定义ExpandpObject的实例化变量,关于dynamic的使用,估计大家都很清楚了。
1.
dynamic obj =
new
ExpandoObject();
2)增加属性成员
01.
[TestMethod]
02.
public
void
ExpandoObjectTest()
03.
{
04.
dynamic employee =
new
ExpandoObject();
05.
employee.FirstName =
"Henry"
;
06.
employee.LastName =
"Cui"
;
07.
employee.Age = 23;
08.
Console.WriteLine(
"Employee's name :{0} age:{1}"
,
09.
employee.FirstName + employee.LastName,
10.
employee.Age);
11.
}
测试的结果:
3)增加Method
在增加方法的时候,先把成员表现成delegate,先看一个没有参数的无返回值的方法:
01.
[TestMethod]
02.
public
void
ExpandoObjectTest()
03.
{
04.
dynamic employee =
new
ExpandoObject();
05.
employee.FirstName =
"Henry"
;
06.
employee.LastName =
"Cui"
;
07.
employee.Age = 23;
08.
employee.SayHello = (Action)(() =>
09.
{
10.
Console.WriteLine(
"{0} say \"Hello\" at {1}"
,
11.
employee.FirstName+
" "
+employee.LastName,
12.
DateTime.UtcNow.ToString());
13.
});
14.
employee.SayHello();
15.
}
在上面的示例中我们将SayHello定义成委托Action类型,并给了默认方法。
下面来看一个有参数、有返回值的:
01.
[TestMethod]
02.
public
void
ExpandoObjectTest()
03.
{
04.
dynamic employee =
new
ExpandoObject();
05.
employee.FirstName =
"Henry"
;
06.
employee.LastName =
"Cui"
;
07.
employee.Age = 23;
08.
employee.SayHello = (Action)(() =>
09.
{
10.