匿名对象和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;
??????? }
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的匿名对象和object的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android adb opendir
- 下一篇: 查看Linux硬件信息命令的使用