C#中的list的System.Predicate 和System.Comparison 的應用


        public class Data
        {
            public int ma = 1;
            public int mb = 2;
            public int mc = 0;
            static int count = 0;
            public Data()
            {
                count++;
                ma = count; 
            }
        }

  //一句話刪除滿足要求的集合
  Asm.RemoveAll((Data md) => { return md.ma % 3 == 0 ? true : false; });

  //等同於
        Asm.RemoveAll(Need);
        bool Need(Data md)
        {
            if (md.ma % 3 == 0)
                return true;
            else
                return false;
        }
Asm.RemoveAll(System.Predicate<T>)傳入其中的委托原型和System.Func<T,TR>是相同的,只是名字不同.

Asm.RemoveAll(System.Comparison<in T>)傳入其中的委托原型和System.Func<TX,TY,int>是相同的,只是名字不同.這個初一看,還很難理解為什么System.Comparison<in T>看起來只是傳入了一個參數,但是實際對應的委托原型卻是兩個參數,這個只有靠記着了,而且是通過返回的數字值的正負來判斷排序方式,比較抽象.
            Asm.Sort ((Data mx,Data my)=> //該方法實現的是將Asm由大到小的排序
            {
                if (mx.mb > my.mb) return -1;  //返回-1表示mx被認定排序值小於my,所以排在前面
                else if (mx.mb < my.mb) return 1; //返回1 表示mx被認定排序值大於my,所以排在后面.
                else  return 0;
            });

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM