<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        詳解Func&lt;T&gt;與Action&lt;T&gt;區別

        來源:懂視網 責編:小采 時間:2020-11-27 22:36:19
        文檔

        詳解Func<T>與Action<T>區別

        詳解Func<T>與Action<T>區別:Func<T>、Action<T> 的區別于說明 一、Func Func是一個.Net內置的委托。 Func<Result>,Func<T1,Result>是一個.Net內置的泛型委托。 Func<TResult> Func<T,TResult> Func
        推薦度:
        導讀詳解Func<T>與Action<T>區別:Func<T>、Action<T> 的區別于說明 一、Func Func是一個.Net內置的委托。 Func<Result>,Func<T1,Result>是一個.Net內置的泛型委托。 Func<TResult> Func<T,TResult> Func

        Func<T>、Action<T> 的區別于說明

        一、Func

        Func是一個.Net內置的委托。

        Func<Result>,Func<T1,Result>是一個.Net內置的泛型委托。

        Func<TResult>
        Func<T,TResult>
        Func<T1,T2,TResult>
        Func<T1,T2,T3,TResult>
        Func<T1,T2,T3,T4,TResult>

        它有5種形式,只是參數個數不同;第一個是無參數,但是有返回值;

        下面是一個簡單的普通委托來傳方法的示例。

        private delegate string Say();
        public static string SayHello()
        {
         return "Hello";
        }
        static void Main(string[] args)
        {
         Say say = SayHello;
         Console.WriteLine(say());
         Console.ReadKey();
        }

        所以,在有時候,我們不知道一個接口同時要做什么操作的時候,我可以給它留一個委托。

        為了更方便,.Net直接默認有了委托。我們再來試試.Net默認帶的委托。

        public static string SayHello()
        {
         return "Hello";
        }
        static void Main(string[] args)
        {
         Func<string> say = SayHello;
         Console.WriteLine(say());
         Console.ReadKey();
        }

        如果需要參數的,還可以這樣傳一份。

        public static string SayHello(string str)
        {
         return str + str;
        } 
        static void Main(string[] args)
        {
         Func<string, string> say = SayHello;
         string str = say("abc"); 
         Console.WriteLine(str); //
        輸出abcabc Console.ReadKey(); }

        二、Action

        Action<T>的用法與Func幾乎一樣,調用方法也類似。

        Action
        Action<T>
        Action<T1,T2>
        Action<T1,T2,T3>
        Action<T1,T2,T3,T4>
        private delegate string Say();
        public static void SayHello(string str)
        {
         Console.WriteLine(str);
        }
        static void Main(string[] args)
        {
         Action<string> say = SayHello;
         say("abc");
         Console.ReadKey();
        }

        三、Func與Action的區別

        Func與Action作用幾乎一樣。只是

        Func<Result>有返回類型;

        Action<T>只有參數類型,不能傳返回類型。所以Action<T>的委托函數都是沒有返回值的。

        四、Func與Action都支持Lambda的形式調用

        還是以一個輸入后,返回重復一次的值作為示例。

        Func<string, string> say = m => m + m;
        Console.WriteLine(say("abc"));    //
        輸出abcabc

        五、最常見到Func的地方

        通常我們最常見到Func是在方法的參數里如下面這樣:

        string XXX(Func<string, string>)

        咱們來看看Linq里面的其中一個Sum:

        public static int Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector);

        里面看到兩點:

        1、擴展方法,與這篇文章無關(擴展的是IEnumerable<TSource>,主要是為了能夠實現IEnumerable<TSource>接口的集合.出函數)。

        2、Func<TSource, int> selector這個參數。

        嘗試寫一個Linq的First函數吧,命名為First2。Linq源代碼里有很多異常情況處理,好多設計模式,可惜我不懂,只提取簡單邏輯了。

        namespace ConsoleApplication2
        {
         static class Extend
         {
         public static TSource First2<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
         {
         //.Net本身的源代碼好多異常情況處理,好多設計模式,我也不懂,只提取邏輯
         foreach (TSource item in source)
         {
         if (predicate(item))
         {
         return (item);
         }
         }
         throw new Exception("不存在滿足條件的第一個元素!");
         }
         }
         class Program
         {
         static void Main(string[] args)
         {
         List<int> ListInt = new List<int>(){ 1, 2, 3, 4, 5 };
         int k = ListInt.First2(m => m > 4); //
        輸出5 Console.WriteLine(k); Console.ReadKey(); } } }

        以上所述是本文的全部內容,有問題的可以和小編聯系,謝謝對腳本之家的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        詳解Func<T>與Action<T>區別

        詳解Func<T>與Action<T>區別:Func<T>、Action<T> 的區別于說明 一、Func Func是一個.Net內置的委托。 Func<Result>,Func<T1,Result>是一個.Net內置的泛型委托。 Func<TResult> Func<T,TResult> Func
        推薦度:
        標簽: 區別 解析 func
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲啪啪AV无码片| 久久久亚洲欧洲日产国码二区| 国产大片91精品免费看3| 亚洲综合另类小说色区色噜噜| 亚洲av午夜成人片精品网站| 中文字幕精品三区无码亚洲| 污污污视频在线免费观看| 久久成人免费电影| 在线jyzzjyzz免费视频| 亚洲AV无码第一区二区三区| 国产一级a毛一级a看免费人娇 | 亚洲一区二区三区电影| 免费观看91视频| 国产三级电影免费观看| 亚洲午夜电影在线观看高清| EEUSS影院WWW在线观看免费| 成年午夜视频免费观看视频| 亚洲乱码中文字幕久久孕妇黑人| 亚洲av无码专区国产不乱码| 最刺激黄a大片免费网站| 国产亚洲精品不卡在线| 亚洲乱色伦图片区小说| 7723日本高清完整版免费| 亚洲精品乱码久久久久66| 光棍天堂免费手机观看在线观看 | 午夜dj免费在线观看| 日产亚洲一区二区三区| 青苹果乐园免费高清在线| 78成人精品电影在线播放日韩精品电影一区亚洲 | 暖暖免费在线中文日本| 亚洲人成综合在线播放| 午夜毛片不卡高清免费| 国产乱妇高清无乱码免费| 免费的一级片网站| 狠狠躁狠狠爱免费视频无码| 亚洲AV无码不卡无码| 国产精品另类激情久久久免费 | GOGOGO免费观看国语| 久久久无码精品亚洲日韩京东传媒| 最近最好的中文字幕2019免费| 大片免费观看92在线视频线视频 |