zoukankan      html  css  js  c++  java
  • c# 扩展方法

    msdn的定义:

    “扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。”

    也就是说你可以对 int 、string、datatable等类型进行扩展,而使用时候不需要去修改或编译类型本身的代码。

    举个例子:

    例如我对LiteDataTable(这个类型是rafy框架的,你就当做是datatable类型就行),直接上代码分析

    
    
    public static class DataConvertExtension
       {
           public static ConvertResult ToEntityList<T>(this LiteDataTable liteDataTable) where T : EntityRepository
           {
               var convertResult = new ConvertResult();
               var entityType = typeof(T);
               var repo = RF.ResolveInstance<T>();
               var entityMeta = repo.EntityMeta;
               var entiyType = entityMeta.EntityType;
     
               var entity = repo.New();
               var list = repo.NewList();
     
               var propertyList = entity.PropertiesContainer.GetCompiledProperties();
               var columns = liteDataTable.Columns.Select(e => e.ColumnName).ToList();
     
               #region 判断liteDataTable是否和要转换的实体列是否匹配
     
               var nameList = new List<string>();
               var canConvert = true;
               for (int i = 0; i < propertyList.Count; i++)
               {
                   nameList.Add(propertyList[i].Name);
               }
               if (propertyList.Count == columns.Count)
               {
                   for (int i = 0; i < propertyList.Count; i++)
                   {
                       var columnName = columns[i];
                       if (!nameList.Contains(columnName))
                       {
                           canConvert = false;
                       }
                   }
               }
     
               #endregion
     
               if (canConvert)
               {
                   foreach (var row in liteDataTable.Rows)
                   {
                       var entityItem = repo.New();
                       foreach (var property in propertyList)
                       {
                           var propertyName = property.Name;
     
                           if (columns.Contains(propertyName))
                           {
                               entityItem.LoadProperty(property, row[propertyName]);
                           }
                       }
                       list.Add(entityItem);
                   }
               }
     
               convertResult.Success = canConvert;
               convertResult.ResultList = list;
               return convertResult;
           }
     
           public class ConvertResult
           {
               public bool Success;
     
               public EntityList ResultList;
           }
       }
     

    看了上面的代码了吧,扩展方法规定类必须是一个静态类,DataConvertExtension是一个静态类,里面包含的所有方法都必须是静态方法。

    msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。”

    到时候调用的时候直接这样就行

    1  LiteDataTable l = new LiteDataTable();
    2 
    3  l.ToEntityList(entity);
  • 相关阅读:
    性能测试学习笔记目录
    关于多项式的一些东西
    几道有意思的积性函数题
    关于min_25筛的一些理解
    【清华集训2014】主旋律
    清北冬令营训练计划
    # HNOI2012 ~ HNOI2018 题解
    贪心(qwq)习题题解
    导数与积分总结
    仙人掌 && 圆方树 && 虚树 总结
  • 原文地址:https://www.cnblogs.com/HKKD/p/7255394.html
Copyright © 2011-2022 走看看