<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
        主站蜘蛛池模板: 免费国产在线观看老王影院| 欧美三级在线电影免费| 亚洲国产成人精品91久久久 | 91精品导航在线网址免费| 亚洲AV无码专区亚洲AV伊甸园| 一级毛片a免费播放王色| 亚洲精品国产自在久久 | a级毛片免费播放| 国产成A人亚洲精V品无码性色 | 一级做a爰片久久免费| 国产亚洲精品成人a v小说| 中国一级毛片免费看视频| 国产精品亚洲а∨无码播放| 久久大香香蕉国产免费网站| 亚洲日产2021三区| 精品免费国产一区二区| 深夜a级毛片免费视频| 亚洲日韩中文字幕在线播放| 精品无码国产污污污免费网站| 亚洲国产成人久久77| 日韩黄色免费观看| 中文字幕看片在线a免费| 久久久无码精品亚洲日韩按摩| 中文字幕无码不卡免费视频| 国产精品无码亚洲一区二区三区| 亚洲精品久久久www| 无码日韩精品一区二区三区免费| 亚洲伊人久久精品| 四虎精品亚洲一区二区三区| 好紧我太爽了视频免费国产| 精品日韩99亚洲的在线发布| 免费一级一片一毛片| 一区二区三区四区免费视频 | 一本大道一卡二大卡三卡免费| 国产亚洲综合成人91精品| 日本免费网址大全在线观看| 特级毛片A级毛片100免费播放| 亚洲日韩精品一区二区三区 | 免费视频爱爱太爽了| 免费精品久久久久久中文字幕 | 中文字幕亚洲免费无线观看日本|