本文实例讲述了C#实现读取匿名对象属性值的方法。分享给大家供大家参考,具体如下:
通过new出匿名对象,可以直接调用该匿名对象的属性名,获取属性值。
1
2
3
|
var objUser = new {Name= "Lilei" ,Age=18 }; //此时可直接读取匿名类属性 Console.WriteLine( "Name:" + objUser.Name); // Name:Lilei |
但当将匿名对象转换成object后,就无法直接读取属性值了;
1
2
3
4
5
6
7
8
9
|
static object GetObj() { var obj = new { Name = "Lilei" , Age = 18 }; return obj; } static void Main( string [] args) { var obj = GetObj(); //此时已无法通过obj.Name的方式获取属性值了 } |
1、通过反射的方式获取属性值
1
2
3
4
5
6
7
8
9
10
11
12
|
static object GetObj() { var obj = new { Name = "Lilei" , Age = 18 }; return obj; } static void Main( string [] args) { var obj = GetObj(); //此时可通过反射的方式获取属性值 string objName = obj.GetType().GetProperty( "Name" ).GetValue(obj).ToString(); Console.WriteLine(objName); // Lilei } |
2、新建个扩展方法,将object转成对应的匿名对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
class Program { static void Main( string [] args) { var obj = GetObj(); var user = obj.ObjCast( new { Name = "" , Age = 0 }); Console.WriteLine( "Name:{0},Age:{1}" , user.Name, user.Age); // Name:Lilei,Age:18 var objList = GetObjList(); var userList = objList.Select(p => p.ObjCast( new { Name = "" , Age = 0 })).ToList(); userList.ForEach(p => { Console.WriteLine( "Name:{0},Age:{1}" , p.Name, p.Age); }); // Name:Lilei,Age:18 // Name:HanMeimei,Age:20 } static object GetObj() { var obj = new { Name = "Lilei" , Age = 18 }; return obj; } static List< object > GetObjList() { List< object > objList = new List< object >(); objList.Add( new { Name = "Lilei" , Age = 18 }); objList.Add( new { Name = "HanMeimei" , Age = 20 }); return objList; } } static class Extensions { public static T ObjCast<T>( this object obj, T sample) { return (T)obj; } } |
希望本文所述对大家C#程序设计有所帮助。
原文链接:https://www.cnblogs.com/willingtolove/p/11204018.html