• 一、List的扩展


    前言

    List的三个扩展方法

    1.处理符合in()格式的扩展方法

    2.处理符合SelectListItem类型的扩展方法(SelectListItem类型是下拉框要用到的类型)

    3.Distinct方法的进一步扩展(如果列表里的值是对象,Distinct就不能通过对象里的字段进行筛选,扩展之后就可以实现)

    操作

    第一个扩展方法:处理符合in()格式的扩展方法

    第一步,这里只是提供整数、字符串两种格式的扩展方法。

    处理字符串的扩展方法,代码如下:

     public static string ToStringList(this IEnumerable<string> listItems)
            {
                string strArray = "";
                foreach (var item in listItems)
                {
                    strArray += string.Format(",'{0}'", item);
                }
                if (strArray.Length > 0)
                {
                    strArray = strArray.Substring(1);
                }
                return strArray;
            }
    View Code

     处理整数的扩展方法,代码如下:

     public static string ToStringList(this IEnumerable<int> listItems)
            {
                string strArray = "";
                foreach (var item in listItems)
                {
                    strArray += string.Format(",{0}", item);
                }
                if (strArray.Length > 0)
                {
                    strArray = strArray.Substring(1);
                }
                return strArray;
            }
    View Code

     第二步,扩展方法以及实现,接下来定义一个List,代码如下:

     List<Studens> list = new List<Studens>();
                for (int i = 0; i < 10; i++)
                {
                    Studens studens = new Studens()
                                      {
                                          Id=1+i,
                                          Age = 23+i,
                                          Name = "大侠"
                                      };
                    list.Add(studens);
                }
    View Code

     第三步,实现,代码如下:

    var age = list.Select(c => c.Age);
    string strAge = age.ToStringList();//扩展方法ToStringList的用法
    var name = list.Select(c => c.Name);
    string strName = name.ToStringList();//扩展方法ToStringList的用法
    View Code

     

     注意

    说到注意就一定得注意,不然就会吃苦。

    注意:不能用参数化给in()操作符赋值,可以用字符串并接

    ******************第一个扩展方法介绍结束***********************

    第二个扩展方法:处理符合SelectListItem类型的扩展方法

    第一步:扩展方法,代码如下:

     public static List<SelectListItem> ToSelectList<T>(this IEnumerable<T> reusltItems, Func<T, int> valueProperty, Func<T, string> textProperty)
            {
                return reusltItems.Select(c => new SelectListItem
                                                   {
                                                       Value = valueProperty(c).ToString(),
                                                       Text = textProperty(c),
                                                   }).ToList();
            }
    View Code

     

    第二步:实现,代码如下:(list定义按照第一个扩展方法)

    List<SelectListItem> listItme = list.ToSelectList(c => c.Id, c => c.Name);

    ******************第二个扩展方法介绍结束***********************

    第三个扩展方法:Distinct方法的进一步扩展

    第一步:定义一个类,代码如下:

     public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
        {
            private Func<T, V> keySelector;
            private IEqualityComparer<V> comparer;
    
            public CommonEqualityComparer(Func<T, V> keySelector, IEqualityComparer<V> comparer)
            {
                this.keySelector = keySelector;
                this.comparer = comparer;
            }
    
            public CommonEqualityComparer(Func<T, V> keySelector)
                : this(keySelector, EqualityComparer<V>.Default)
            { }
    
            public bool Equals(T x, T y)
            {
                return comparer.Equals(keySelector(x), keySelector(y));
            }
    
            public int GetHashCode(T obj)
            {
                return comparer.GetHashCode(keySelector(obj));
            }
        }
    View Code

     第二步:实现扩展方法,代码如下:

     public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
            {
                return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
            }
    
            public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector, IEqualityComparer<V> comparer)
            {
                return source.Distinct(new CommonEqualityComparer<T, V>(keySelector, comparer));
            } 
    View Code

     第三步:实现,代码如下:(list定义按照第一个扩展方法)

     var listDis = list.Distinct(p => p.Name).ToArray();

    ******************第三个扩展方法介绍结束***********************

    结尾

    在实际的开发中,扩展方法既简单又快速,还挺有规范,值得在开发中积累下来。

  • 相关阅读:
    ffmpeg文档22-混合器(复用器)
    ffmpeg文档21-分离器
    ffmpeg文档20-格式选项
    ffmpeg文档19-比特流滤镜
    ffmpeg文档18-字幕编码器
    ffmpeg文档17-视频编码器
    ffmpeg文档16-音频编码器
    python 学习笔记,selenium 自动化测试 更新开始
    python 遇到 'unicode' object is not callable 错误
    字符串函数汇总
  • 原文地址:https://www.cnblogs.com/zl879211310/p/3476891.html
Copyright © 2020-2023  润新知