Пример #1
0
        public int Compare(object x, object y)
        {
            ClassCSharpVersion1 instance1 = (ClassCSharpVersion1)x;
            ClassCSharpVersion1 instance2 = (ClassCSharpVersion1)y;

            return(instance1.Name.CompareTo(instance2.Name));
        }
Пример #2
0
        static void Main(string[] args)
        {
            // decimal类型是一个128位的数据类型
            decimal da1 = 34287786090351m;
            int     i   = 10;
            decimal abc = da1 + i;

            dynamic Customer = new ExpandoObject();

            Customer.Name    = "Guoliang";
            Customer.Age     = 29;
            Customer.Female  = false;
            Customer.Company = "DTMobile";
            Console.ReadKey();

            ClassCSharpVersion1 P1 = new ClassCSharpVersion1("P3", 100);

            // 岔开一句,静态类型是类中与其属性无关的方法都可以被声明成静态方法;
            // 静态方法与实例化方法的执行效率其实并没有太大差别;
            ClassCSharpVersion1.print();

            //实例化4个版本C#的类;
            ArrayList list = ClassCSharpVersion1.GetSample();
            List <ClassCSharpVersion2>            list2    = ClassCSharpVersion2.GetSample();
            List <ClassCSharpVersion3>            list3    = ClassCSharpVersion3.GetSample();
            List <ClassCSharpVersion4>            list4    = ClassCSharpVersion4.GetSample();
            List <ClassCSharpVersion4DisposeNull> listlinq = ClassCSharpVersion4DisposeNull.GetSample();

            // C#1调用实现ICompare接口的排序类
            Console.WriteLine("----以下是C#1的排序结果----");
            //list.Sort(new ClassSortCSharpVer1());
            list.Sort(new ClassSortCSharpVer1());
            foreach (ClassCSharpVersion1 listsort in list)
            {
                Console.WriteLine(listsort.ToString());
            }
            Console.WriteLine("----C#1的排序结束----");

            Console.WriteLine("----以下是C#2的排序结果----");
            list4.Sort(new ClassSort());
            foreach (ClassCSharpVersion4 listsort in list4)
            {
                Console.WriteLine(listsort.ToString());
            }
            Console.WriteLine("----C#2的排序结束----");

            // 这个也是一个C#2特性的写法,使用委托(匿名方法)将CompareTo这样的方法直接返回
            list2.Sort(
                delegate(ClassCSharpVersion2 x, ClassCSharpVersion2 y)
            {
                return(x.Name.CompareTo(y.Name));
            }
                );

            // 以下这两个是利用了Lambda表达式中使用compare
            list3.Sort((x, y) => x.Name.CompareTo(y.Name));
            // 此处不打印了;

            // 更加简洁的Lambda表达式的使用
            foreach (ClassCSharpVersion3 listsort in list3.OrderBy(p => p.Name))
            {
                Console.WriteLine(listsort);
            }

            // 排序之后是查找,C#1.0使用迭代的方法就不写了;
            // C#2.0使用委托的方法进行查找,其一:直接使用委托;
            Predicate <ClassCSharpVersion4> FindFuncDele = FindName;
            List <ClassCSharpVersion4>      FindRetDele  = list4.FindAll(FindFuncDele);

            // C#2.0使用委托的方法进行查找,其二:使用匿名委托;
            Predicate <ClassCSharpVersion4> FindFuncNoNameDele = delegate(ClassCSharpVersion4 obj) { return(obj.Name == "P5"); };
            List <ClassCSharpVersion4>      FindRet            = list4.FindAll(FindFuncNoNameDele);

            // C#3.0使用lambda表达式,以下两句说明了lambda表达式实际上就是一个委托;
            Predicate <ClassCSharpVersion4> FindFunc2 = p => p.Name == "P5";
            List <ClassCSharpVersion4>      FindRet2  = list4.FindAll(FindFunc2);

            // C#3.0使用lambda表达式的方法进行查找;
            foreach (ClassCSharpVersion4 listobj in list4.Where(p => p.Name == "P5"))
            {
                Console.WriteLine(listobj.Name);
            }

            // 以下是查询代码;
            // 通过循环遍历,查询出来价格大于10的产品
            foreach (ClassCSharpVersion1 listselect in list)
            {
                if (listselect.Price >= 300)
                {
                    Console.WriteLine("C#Version1中价格大于300的产品有:" + listselect.ToString());
                }
            }

            // 以下是C#2特性的查询代码,主要带来的特性就是条件和操作分开
            // 实现了一个委托,这个委托入参为ClassCSharpVersion2,并且返回值为Predicate<ClassCSharpVersion2>
            Predicate <ClassCSharpVersion2> test = delegate(ClassCSharpVersion2 p) { return(p.Price > 100); };
            // FindAll的签名为:FindAll(Predicate<T>),所以在上边要实现一个委托;
            List <ClassCSharpVersion2> match = list2.FindAll(test);

            // print变量也是一个委托;
            Action <ClassCSharpVersion2> print = Console.WriteLine;

            match.ForEach(print);

            // ClassCSharpVersion重载ToString尝试下打印
            string A = list[2].ToString();
            string B = listlinq[0].ToString();

            Console.WriteLine(A);
            Console.WriteLine(B);

            Console.Read();
            return;
        }