<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      合理使用“.NET擴展方法”來簡化代碼(例子:空值判斷,利用擴展方法實現LINQ操作符ForEach)

       

      我們先簡單介紹擴展方法的定義,擴展方法是用來在類型定義完成后再繼續為其添加新的方法。擴展方法使您能夠向現有類型“添加”方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。 擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。你只要在靜態類的靜態方法的參數前加上this,就可以生成這個類的擴展方法。

      如果你曾經開發過詳細資料修改的窗口或者頁面,你一定經常會為空值的判斷而感到煩惱。

      這時間你被迫在獲取值之前先去判斷控件的Text值是否為空值,如果為空則輸入默認值,如果非空,則進行輸入值的類型轉換。

      User user=new User();

      if(tbID.Text!=null&&tbID.Text.Trim()!="")

          user.ID=int.Parse(tbID.Text);

      else

           user.ID=-1;

      if(tbName.Text!=null&&tbName.Text.Trim()!="")

          user.Name=tbName.Text;

      ele

          user.Name="暫無";

      ............

      UserManager.Update(user);

      過多的if...else...判斷會使代碼變成過于復雜,可讀性差。此時,使用擴展方法可以代替if(判斷式),從而簡化代碼。只要應用此擴展代碼后,以后的空值判斷就可以直接使用一個方法去代替,從而擺脫if...else...的困擾。

      這時候,你需要創建一個靜態類Extension,然后在靜態類里面添加一個靜態方法GetString,這時候要把第一個參數設置為this string data,現在你已經成功為string類創建了一個擴展方法了。同樣,你也可以相同方法為string類創建一個擴展方法GetInt。通過這兩個方法你便可以直接在代碼中的string對象直接使用這兩個方法,而不會再受if...else...的困擾。

      public static class Extension

      {

           public static string GetString(this string data )

           {

                if(data!=null&&data.Trim()!="")

                     return data; 

                else

                     return “暫無”;

           }

           public static int GetInt(this string data )

           {

                  if(data!=null&&data.Trim()!="")

                      return int.Parse(data);

                  else

                      return -1;

           }

      }

      現在,你可以直接在String類里面直接使用GetString(),GetInt()這兩個擴展方法了

      User user=new User();

      user.ID=tbID.Text.GetInt();

      user.Name=tbName.Text.GetString();

      .............

      UserManager.Update(user);

      如果你對LINQ的結構有了一定的了解,那么你就應該理解LINQ的表達式正是使用IEnumerable或者IEnumerable<T>的擴展方法生成的,多 個LINQ的操作符都可以利用代碼進行擴展,你可以按需要寫下實用性更高的操作符。在介紹LINQ擴展方法前,先介紹一下LINQ里面常用的委托。

      delegate void Action<T>(T obj)

      delegate TOutput Converter<TInput,TOutput>(TInput input);

      delegate Boolean Predicate<T>(T object);

      delegate void Func<TResult>();

      delegate void Func<T,TResult>();

      在介紹如何開發LINQ的自定表達式前,先為大家介紹一下LINQ里面Where操作符的實現方式。

      public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source ,Func<TSource,Boolean> predicate)

      {

             foreach(TSource element in source)

             {

                  if(predicate(element))

                     yield return element;

             }

      }

      這樣每個IEnumerable<T>都可以使用Where操作符,在你對擴展已經有了一定的了解后,你也可以嘗試為LINQ建立更多適用的操作符了。在很多LINQ數據查詢時,你都會用到foreach去對查詢結果進行操作,每次都使用foreach可能令你感到厭煩。

      例如:下面是你最常用方法

      IEnumerable<Book>  books=from x in BookList

                                                           select x;

      foreach(Book book in books)

      {

             Console.WriteLine("Book Name is"+book.Name);

             Console.WriteLine("Book Author is"+book.Author);

             ..........

      }

      現在你可以嘗試用擴展方法為IEnumerable<T>設置一個ForEach表達式

      public static void ForEach<T>(this IEnumerable<T> source ,Action<T> func)

      {

           foreach(var item in source)

                func(item);

      }

      通過一個這樣簡簡單單的擴展方法,你就可以直接在LINQ表達式中實現ForEach

      DataBase.Books.Where(x=>x.Price>30)

                              .ForEach(x=>{

                                                          Console.WriteLine(“Book Name is”+x.Name);

                                                          Console.WriteLine(“Book Author is" +x.Author);

                                           } );

      在LINQ里面,擴展方法隨處可見,深入了解擴展方法,可以讓你按需要而為系統可發更適用的方法,從而簡化代碼,趕快動手,設置一些合適自己使用的擴展方法吧!對.NET開發有興趣的朋友請加入博客園討論小組“.NET高級編程” 一起探討!

       

      對 JAVA 開發有興趣的朋友歡迎加入QQ群:174850571 共同探討!
      對 .NET  開發有興趣的朋友歡迎加入QQ群:162338858 共同探討 !

       

      .NET基礎篇

      以異步的方式操作TCP/IP套接字——以異步方式實現簡單的聊天室
      合理使用“.NET擴展方法”來簡化代碼(例子:空值判斷,利用擴展方法實現LINQ操作符ForEach)
      分部類和分部方法
      反射的奧妙
      利用泛型與反射更新實體(ADO.NET Entity Framework)

       

      作者:風塵浪子
      http://www.rzrgm.cn/leslies2/archive/2011/01/28/1939883.html

      原創作品,轉載時請注明作者及出處






      posted on 2011-01-28 11:05  風塵浪子  閱讀(5447)  評論(12)    收藏  舉報

      導航

      主站蜘蛛池模板: 另类专区一区二区三区| 99视频偷窥在线精品国自产拍| 91人妻熟妇在线视频| 欧洲精品色在线观看| 国产无遮挡免费真人视频在线观看| 伊人久久精品一区二区三区| 免费A级毛片无码A∨蜜芽试看| 亚洲男人电影天堂无码| 日韩av无码精品人妻系列| 日韩精品一区二区三区中文无码| 日本美女性亚洲精品黄色| 国产麻豆91网在线看| 国产边打电话边被躁视频| 日本高清日本在线免费| 最新国产精品好看的精品| 中文字幕人成无码免费视频| 一区二区和激情视频| 国产精品不卡区一区二| 国产香蕉久久精品综合网| 中文字幕在线观看一区二区| 久久中文字幕无码一区二区| 最新中文字幕国产精品| 亚洲中文字幕人妻系列| 国产福利萌白酱在线观看视频| 免费无码成人AV片在线 | 高清免费毛片| 亚洲一区二区精品另类| 亚洲免费观看视频| 国产精品国产三级国产av剧情| 99欧美日本一区二区留学生| 中文有无人妻vs无码人妻激烈| 玩两个丰满老熟女久久网| 《特殊的精油按摩》3| 专栏| 成av人电影在线观看| 欧美经典人人爽人人爽人人片 | caoporn成人免费公开| 精品成在人线av无码免费看| 免费无码久久成人网站入口| 在线 欧美 中文 亚洲 精品| 老司机免费的精品视频|