Action和Func的用法

模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养)。可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托。开始分析

1:小明要买一本一个程序员自我修养的书籍,硬性要求 (这就是要定义委托性质)

private delegate void BuyBook();

2:附近书店 (委托的方法)

public static void Book()
{
    Console.WriteLine("我是提供书籍的");
}

3:小明和书店建立关系(给委托绑定方法) 

BuyBook buyBook = new BuyBook(Book);

4:小明给钱拿书(触发)

buybook();

上面的内容是为了能理解委托的用法下面呢我开始讲解Action和Func

Action的用法

1:小明很是苦恼,我就是买一本书籍,每次都让我定义下,烦死了,有没有一种方法不去定义委托呢,那么有吗,还真有,就是我们今天讲的Action

Action bookAction = Action(Book);
BookAction();

这样是不是就简单了很多

2:小明现在又不满意了,我把一个程序员的自我修养看完了,现在呢想买本其他书,那怎么办,我是不是要重新再次定义委托。其实不需要你只需要把参数穿过来就可以了。下面我们看Action<T>的用法

Action<string> bookAction = new Action<string>(Book);

public static void Book(string bookName)
{
    Console.WriteLine("我买的书是{0}", bookName);
}

3:现在小明又改变主意了,我不仅要自己选择书籍,我还要在一个牛逼的书籍厂家买,有没有这种方式呢,那么告诉你有,Action<in T1,in T2>

Action<string, string> bookAction = new Action<string, string>(Book);

public static void Book(string bookName, string manufacturers)
{
    Console.WriteLine("我买的书是:{0},来自:{1}", bookName, manufacturers);
}

Func的用法

小明又发生疑问了,每次我自己都去书店去拿书,有没有一种方法直接送到我家里呢,那么Func专门提供了这样的服务

Func 解释 封装一个不定具有参数(也许没有)但却返回 TResult 参数指定的类型值的方法。

1:我们先看一个没有参数只有返回值的方法

Func<string> book = new Func<string>(Book);
book();

public static string Book()
{
    return "送书来了";
}

 2:有参数有返回值的方法

Func<string, string> book = new Func<string, string>(Book);
Console.WriteLine(book("基督山伯爵"));//1

public static string Book(string bookName)
{
    string bookId = GetIdByBookName(bookName);
    return bookId;
}

public static string GetIdByBookName(string bookName)
{
    string Id = "0";
    switch(bookName)
    {
        case "基督山伯爵":
            Id = "1";
            break;
        case "茶花女":
            Id = "2";
            break;
    }

    return Id;
}

总结

1:Action用于没有返回值的方法(参数可以根据自己情况进行传递)

2:Func恰恰相反用于有返回值的方法(同样参数根据自己情况情况)

3:记住无返回就用action,有返回就用Func

转载:C#之Action和Func的用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值