• c#泛型入门


     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace CsharpDataStructure
     7 {
     8     class Program
     9     {
    10         //声明:本程序只说明几种常见委托和代理的使用,名称的定义不是很规范
    11         public delegate void MyAction<T>(T obj);//自己定义的委托,无返回值,只有一个泛型参数
    12         static void Main(string[] args)
    13         {
    14             var method=new MyAction<int>(PrintInt);
    15             var selectBig = new Func<List<int>,int,int>(SelectBig);//创建一个Func代理,参数有两个,一个是list,一个是int;返回值是int
    16             var boolMethod = new Predicate<int>(a => { return a > 3; });//创建一个Predicate类型的代理,只有一个参数int型,返回值默认bool型,
    17             var bigMethod = new Action<int,int>(ShowBig);//创建一个Action型的代理,有两个int类型参数,默认无返回值
    18             method(3);
    19             int i = 6;
    20             if (boolMethod(i))
    21             {
    22                 Console.WriteLine(i);
    23             }
    24             bigMethod(6,7);
    25             List<int> mm = new List<int>() { 4, 6, 9, 8 };
    26             Console.WriteLine(selectBig(mm, 3));
    27             int[] number = new int[6] { 1, 2, 3, 4, 5 ,8};
    28             IEnumerable<int> result = Filter<int>(number, (int item) => { return item > 3; });//可枚举类型的拓展,方法是lambda表达式
    29             foreach (var item in result)
    30             {
    31                 Console.WriteLine(item);
    32             }
    33             Console.ReadLine();
    34         }
    35         static void PrintInt(int i)
    36         {
    37             Console.WriteLine(i);
    38         }
    39         static void ShowBig(int m,int n)
    40         {
    41             if(m>=n)
    42                 Console.WriteLine(m);
    43             else
    44                 Console.WriteLine(n);
    45         }
    46         static int SelectBig(List<int> a,int b)
    47         {
    48             return a.Max()-b;
    49         }
    50         public static IEnumerable<T> Filter<T>(IEnumerable<T> ObjectList, Predicate<T>FilterFunc)//可枚举类型拓展:返回类型是可枚举的,参数一个是可枚举类型,一个是代理方法
    51         {
    52             List<T> ResultList = new List<T>();
    53             foreach (var item in ObjectList)
    54             {
    55                 if (FilterFunc(item))
    56                 {
    57                     ResultList.Add(item);
    58                 }
    59             }
    60             return ResultList;
    61         }
    62     }
    63 }

      .NET类库在System名称空间,下定义了三种比较常用的泛型委托

    Predicate<T>委托:

    public delegate bool Predicate<T>(T obj);

    这个委托描述的方法为接收一个T类型的参数,返回一个BOOL类型的值,一般用于比较方法

    Action<T>委托

    public delegate void Action<T>(T obj);
    public delegate void Action<T1, T2>(T1 arg1, T2 arg2);

    这个委托描述的方法,接收一个或多个T类型的参数(最多16个,我这里只写了两种类型的定义方式),没有返回值

    Func<T>委托

    public delegate TResult Func<TResult>();
    public delegate TResult Func<T, TResult>(T arg);

    这个委托描述的方法,接收零个或多个T类型的参数(最多16个,我这里只写了两种类型的定义方式),
    与Action委托不同的是,它有一个返回值,返回值的类型为TResult类型的。

  • 相关阅读:
    2. 两数相加
    1. 两数之和
    x-pack elasticsearch
    简单的文档
    PHP imagepng函数 问题
    Nginx 配置
    nginx内置变量
    TCP通信
    mysql 的一些操作
    ubuntu 软件包降级
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3057241.html
Copyright © 2020-2023  润新知