欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现读取匿名对象属性值的方法示例总结

程序员文章站 2023-11-18 17:33:46
本文实例讲述了c#实现读取匿名对象属性值的方法。分享给大家供大家参考,具体如下:通过new出匿名对象,可以直接调用该匿名对象的属性名,获取属性值。var objuser = new {name="li...

本文实例讲述了c#实现读取匿名对象属性值的方法。分享给大家供大家参考,具体如下:

通过new出匿名对象,可以直接调用该匿名对象的属性名,获取属性值。

var objuser = new {name="lilei",age=18 };
//此时可直接读取匿名类属性
console.writeline("name:" + objuser.name);// name:lilei

但当将匿名对象转换成object后,就无法直接读取属性值了;

static object getobj()
{
 var obj = new { name = "lilei", age = 18 };
 return obj;
}
static void main(string[] args)
{
 var obj = getobj();//此时已无法通过obj.name的方式获取属性值了
}

1、通过反射的方式获取属性值

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转成对应的匿名对象

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;
 }
}