匿名对象和object的转换

参考http://www.2cto.com/kf/201207/139227.html

有时候经常用到需要把一个匿名对象存入session或List<object>或其他容器中,可是取出来的时候变成object了,不太方便使用。 
下面是一种转换方式:
 
[csharp] 
 
    class Program  
 
    {  
 
        static void Main(string[] args)  
 
        {  
 
            List<object> olist = new List<object>();  
 
            olist.Add(new { Name = "Hauk", Age = 22 });  
 
            olist.Add(new { Name = "Emily", Age = 22 });  
 
  
 
  
 
            //使用动态类型  
 
            foreach (dynamic item in olist)  
 
            {  
 
                Console.WriteLine(item.Name);  
 
            }  
 
  
 
  
 
            //做类型转换  
 
            var obj = ChangeType(olist[0], new { Name = "", Age = 0 });  
 
            Console.WriteLine(obj.Name);  
 
  
 
  
 
            //直接反射  
 
            Console.WriteLine(olist[0].GetType().GetProperty("Name").GetValue(olist[0]).ToString());  
 
        }  
 
  
 
  
 
        static T ChangeType<T>(object obj, T t)  
 
        {  
 
            return (T)obj;  
 
        }  
 
    }  View Code
             /获取所有员工和账号列表对应关系。
            DataTable dtAccoutIDList = bll.GetList(model);
            //添加一行空行。
            DataRow dr = dtAccoutIDList.NewRow();
            dr["AccountName"] = "";
            dr["AccountID"] = "-2";
            dtAccoutIDList.Rows.InsertAt(dr, 0);
            dtAccoutIDList.AcceptChanges();
            this.cmbAccountList.DisplayMember = "AccountName";
            this.cmbAccountList.ValueMember = "[AccountID]";
   var query3 = dtAccoutIDList.AsEnumerable().Select(s => new { AccountID = s["AccountID"].ToInt(), AccountName = s["AccountName"].ToString() }).OrderBy(o => o.AccountName).Distinct().ToList();
                this.cmbAccountList.DataSource = query3;
--
将数据源转换为匿名对象数组。
var cmbAccountDataSource = this.cmbAccountList.DataSource.ChangeType(new[] { new { AccountID = 0, AccountName = "" } }.ToList()); 
或者 this.cceAccount.Properties.DataSource = accounts.Select(m => new { Account = m }).ToList();

将选择的项,转换为匿名对象
var cmbSelectedItem = this.cmbAccountList.SelectedItem.ChangeType(new { AccountID = 0, AccountName = "" });
int selectedAccountID=cmbSelectedItem.AccountID
string selectedAccoutName=cmbSelectedItem.AccountName
///扩展方法
 public static class Extension
 {
 public static T ChangeType<T>(this object obj, T t)
        {
            return (T)obj;
        }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏个人随笔

C#编写街道管理系统

项目需求: 一、语言和环境A、实现语言 C#B、环境要求 Visual Studio 2012 二、功能要求 现使用.NET WinForms技术为居委会开发...

4766
来自专栏lgp20151222

Java 读取 json文件

和this.getClass().getClassloader().getResource("") 区别??

3673
来自专栏JadePeng的技术博客

使用Mongodb 做对象缓存

mongodb高效的访问速度,用来快速存取数据再合适不过了,缓存神马的,可以用这个的 另外,有的时候,如果仅仅存储几条数据,单独去建立一张表代价太大,这个时候,...

5005
来自专栏领域驱动设计DDD实战进阶

领域驱动设计案例之仓储顶层实现

3325
来自专栏跟着阿笨一起玩NET

LINQ多条件OR模糊查询

本文章转载:http://www.cnblogs.com/guyun/archive/2012/10/18/2729888.html

1871
来自专栏张善友的专栏

JavaScript 和asp.net配合编码字符串

     .net 的System.Text.ASCIIEncoding 和System.BitConvertor类配合在服务端加密字符串,客户端使用Javas...

2499
来自专栏码农阿宇

.Net Core下 Redis的String Hash List Set和Sorted Set的例子

1.新建一个.Net Core控制台应用程序,用Nuget导入驱动 打开程序包管理控制台, ? 执行以下代码。 PM> Install-Package Serv...

4127
来自专栏LeoXu的博客

org.apache.http.client.methods.HttpPost 两种消息体形式 —— UrlEncodedFormEntity 和 StringEntity

使用 UrlEncodedFormEntity 来设置 body,消息体内容类似于“KEY1=VALUE1&KEY2=VALUE2&...”这种形式,服务端接收...

2782
来自专栏电光石火

C#解析JSON

使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后添加dll引用就能用。 首先添加引用:us...

6395
来自专栏Java职业技术分享

java爬虫带你爬天爬地爬人生,爬新浪

HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持...

1685

扫码关注云+社区

领取腾讯云代金券