亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C# 表達式目錄樹的應用詳解

 更新時間:2017年12月18日 10:13:23   作者:Torey_li  
下面小編就為大家分享一篇C# 表達式目錄樹的應用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

使用表達式目錄樹實現(xiàn)兩個不同類型的屬性賦值:

public class People
{
public int Age { get; set; }
public string Name { get; set; }
public int Id;
}
public class PeopleCopy
{
public int Age { get; set; }
public string Name { get; set; }
public int Id;
}
public class Class1
{
private static Dictionary<string, object> _Dic = new Dictionary<string, object>();
private static TOut TransExp<TIn, TOut>(TIn tIn) {
string key = $"funckey_{typeof(TIn).FullName}_{typeof(TOut).FullName}";
if (!_Dic.Keys.Contains(key)) { 
ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p");
List<MemberBinding> memberBindingList = new List<MemberBinding>();
foreach (var item in typeof(TOut).GetProperties())
{
PropertyInfo propertyInfo = typeof(TIn).GetProperty(item.Name);
if (propertyInfo == null) { continue; }
MemberExpression property = Expression.Property(parameterExpression, propertyInfo);
memberBindingList.Add(Expression.Bind(item, property));
}
foreach (var item in typeof(TOut).GetFields())
{
FieldInfo fieldInfo = typeof(TIn).GetField(item.Name);
if (fieldInfo == null) { continue; }
MemberExpression property = Expression.Field(parameterExpression, fieldInfo);
memberBindingList.Add(Expression.Bind(item, property));
}
Expression<Func<TIn, TOut>> expression = Expression.Lambda<Func<TIn, TOut>>(Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList), new ParameterExpression[]
{
parameterExpression
});
Func<TIn, TOut> func = expression.Compile();
_Dic.Add(key,func);
}
return ((Func < TIn, TOut > )_Dic[key])(tIn);
}
}
static void Main(string[] args)
{
List<ClassLibrary1.PeopleCopy> PeoleCopyList = new List<ClassLibrary1.PeopleCopy>();
for (int i = 0; i < 5; i++)
{
ClassLibrary1.People people = new ClassLibrary1.People() { Id = 5+1, Age = 25, Name = "aaa"+i };
PeoleCopyList.Add(Class1.ToutGet<ClassLibrary1.People, ClassLibrary1.PeopleCopy>(people));
}
}

以上這篇C# 表達式目錄樹的應用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C# BeginInvoke實現(xiàn)異步編程方式

    C# BeginInvoke實現(xiàn)異步編程方式

    這篇文章主要介紹了C# BeginInvoke實現(xiàn)異步編程方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 字符串和十六進制之間的轉(zhuǎn)換方法實例

    字符串和十六進制之間的轉(zhuǎn)換方法實例

    這篇文章介紹了字符串和十六進制之間的轉(zhuǎn)換方法實例,有需要的朋友可以參考一下
    2013-11-11
  • Unity3D實現(xiàn)描邊框效果

    Unity3D實現(xiàn)描邊框效果

    這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)描邊框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#開發(fā)微信公眾號接口開發(fā)

    C#開發(fā)微信公眾號接口開發(fā)

    這篇文章主要介紹了C#微信公眾號接口開發(fā),靈活利用網(wǎng)頁授權(quán)、帶參數(shù)二維碼、模板消息,提升用戶體驗之完成用戶綁定個人微信及驗證碼獲取,需要的朋友可以參考下
    2015-07-07
  • c# WPF中CheckBox樣式的使用總結(jié)

    c# WPF中CheckBox樣式的使用總結(jié)

    這篇文章主要介紹了c# WPF中CheckBox樣式的使用總結(jié),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • WinForm實現(xiàn)同時讓兩個窗體有激活效果的特效實例

    WinForm實現(xiàn)同時讓兩個窗體有激活效果的特效實例

    這篇文章主要介紹了WinForm實現(xiàn)同時讓兩個窗體有激活效果的特效實例,基于windows api實現(xiàn)一個窗體激活的時候給另外一個發(fā)消息的特效,在進行C#項目開發(fā)時有一定的實用價值,需要的朋友可以參考下
    2014-09-09
  • C#使用SharpZipLib壓縮解壓文件

    C#使用SharpZipLib壓縮解壓文件

    這篇文章介紹了C#使用SharpZipLib壓縮解壓文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#多線程系列之任務基礎(三)

    C#多線程系列之任務基礎(三)

    本文詳細講解了C#多線程的任務基礎,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#操作ftp類完整實例

    C#操作ftp類完整實例

    這篇文章主要介紹了C#操作ftp類,以一個完整實例形式詳細分析了C#操作FTP文件傳輸所涉及的FTP連接、文件傳輸、參數(shù)設置、文件刪除等技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Winform開發(fā)中使用下拉列表展示字典數(shù)據(jù)的幾種方式

    Winform開發(fā)中使用下拉列表展示字典數(shù)據(jù)的幾種方式

    這篇文章介紹了Winform開發(fā)中使用下拉列表展示字典數(shù)據(jù)的幾種方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09

最新評論