欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > .net泛型通用函數的特殊問題的解決方法

.net泛型通用函數的特殊問題的解決方法

熱門標簽:玉林市機器人外呼系統哪家好 南陽外呼系統定制化 蘋果手機凱立德地圖標注 申請400電話手續 百度ai地圖標注 電話機器人軟件銷售工作 同安公安400電話怎么申請流程 合肥電銷外呼系統哪家公司做的好 預測式外呼系統使用說明

  自從2.0版本的net framework推出之后泛型(Generic)得到了廣泛好評。它不必像object類型一樣性能上因為“拆箱”或者“裝箱”得到損失,同時在編譯語法檢測階段就可以實時檢測出傳入或者傳出的類型是否符合特定條件。

  但“金無赤足,人無完人”——在我們享受這些幸福編程的同時,泛型自身類型的不確定也帶來了一個顯著的問題——無法進行運算符重載。譬如現在我要寫一個函數(一個通用的選擇排序算法,使用泛型T),該怎么辦呢?如果你簡單使用這樣的代碼(C#如下):

復制代碼 代碼如下:

//從小到大,改進型選擇排序算法

public static void SortT>(T[] array)
{
     bool flag = false; //標記是否已經排序

     for(int i=0;iarray.Length-1;++i)
     {
          flag = false;  //每次假定都已經排序,無須再排序

          for(int j=i+1;iarray.Length;++j)
          {
               if(array[i]>array[j])
                {
                      int temp = array[i];
                      array[i]=array[j];
                      array[j]=templ
                      flag = true; //已經排序
                }
          }
           if(!flag)
           {
               break;
           }
     }
}


  編譯之后很快發現提示“運算符‘>'無法作用于T”一類的提示。

  為什么呢?我們知道,凡是可以進行大于、小于比較的類型肯定都定義了運算符重載。一般類必須為此定義方可進行比較,不然大于號或者小于號(或者其它運算符)無法知道如何比較而發生錯誤。那么泛型因為事先都不知道什么類型?編譯器檢查器自然無法推斷你運行時動態傳入的這個類型一定保證是實現了運算符重載,嚴格語法檢查情況下就自然報錯。

  怎么辦呢?強制規定泛型T必須實現比較器(強制T必須實現IComparable,或者類似接口)。

復制代碼 代碼如下:

public static void SortT>(T[] array)where T:IComparable
{
     bool flag = false; //標記是否已經排序

     for(int i=0;iarray.Length-1;++i)
     {
          flag = false;  //每次假定都已經排序,無須再排序

          for(int j=i+1;iarray.Length;++j)
          {
               if(array[i].Compare(array[j])>0)
                {
                      int temp = array[i];
                      array[i]=array[j];
                      array[j]=templ
                      flag = true; //已經排序
                }
          }
           if(!flag)
           {
               break;
           }
     }
}


  一旦對泛型進行約束,那么泛型必然是實現該接口的類,必然擁有此方法(Compare方法返回結果int類型,如果大于0表示前面一個數字大于后面一個)。

  當然,微軟類庫中有一個Comparer靜態類,已經實現了此接口可以直接進行比較(http://msdn.microsoft.com/zh-cn/library/system.collections.comparer.comparer.aspx),因此我們也可以選擇直接使用這個靜態類中的Compare方法得到結果。

  【例2】實現一個通用的“+”——即如果傳入的字符串,則自動按照字符串進行字符拼接;如果傳入的是其它基本類型(int,double等),則返回相加結果。

  微軟沒有為“+”預定義接口,因此無法直接使用接口的方式來做(當然你自己強制定義一個,也可以如法炮制)。我們現在換一個方法——使用表達式樹(C#代碼如下):

復制代碼 代碼如下:

public static T AddT>(T a, T b)
        {
            Expression left = Expression.Constant(a);
            Expression right = Expression.Constant(b);

            Type t = typeof(T);

            Expression value;

            if (t == typeof(string))
            {
                value = Expression.Constant(a.ToString()+b.ToString());
            }
            else
            {
                value = Expression.Add(left, right);
            }

            ExpressionFuncT>> addExp = Expression.LambdaFuncT>>(value);

            FuncT> addFunc = addExp.Compile();

            return addFunc();
        }


  動態判斷T是string還是其它基本類型,然后調用不同的方法組合成為表達式樹,動態編譯成為一個Func表達式,返回結果即可。

您可能感興趣的文章:
  • asp.net實現利用反射,泛型,靜態方法快速獲取表單值到Model的方法
  • 詳解.NET 4.0中的泛型協變(covariant)和反變(contravariant)
  • .NET基礎之自定義泛型分析
  • .NET開發基礎:從簡單的例子理解泛型 分享
  • 使用.NET中的Action及Func泛型委托深入剖析
  • .NET CORE動態調用泛型方法詳解

標簽:揚州 南京 海南 南昌 嘉興 臺州 淄博 南京

巨人網絡通訊聲明:本文標題《.net泛型通用函數的特殊問題的解決方法》,本文關鍵詞  .net,泛型,通用,函數,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《.net泛型通用函數的特殊問題的解決方法》相關的同類信息!
  • 本頁收集關于.net泛型通用函數的特殊問題的解決方法的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    精品一区二区三区在线播放| b站大片免费直播| 久久r这里只有精品| 久久精品一二三| 久久激五月天综合精品| 添女人荫蒂视频| 欧美一级精品大片| 日韩电影在线观看一区| 一区二区视频观看| 日韩亚洲国产中文字幕欧美| 欧美老年两性高潮| 亚洲一线二线三线久久久| 宇都宫紫苑在线播放| 日本久久电影网| 亚洲九九爱视频| 91色porny蝌蚪| 亚洲av无码一区二区三区在线| 欧美精品一区二区三区四区| 日日夜夜免费精品视频| 日本三级日本三级日本三级极| 制服丝袜在线91| 日本aⅴ免费视频一区二区三区| 亚洲av无码国产精品久久| 欧美成人精品福利| 狠狠色丁香婷综合久久| 日本 欧美 国产| 蜜桃av乱码一区二区三区| 精品久久国产字幕高潮| 国产一区二区在线电影| 欧美大片xxxx| 亚洲三级在线播放| 国产人妖在线观看| 日韩欧美精品在线| 国产一区二区三区在线观看精品| а天堂中文在线资源| 亚洲欧美自拍偷拍色图| 成年人看片网站| 日韩色视频在线观看| 极品瑜伽女神91| 欧美三级在线免费观看| 亚洲一区二区综合| 伊人网伊人影院| 中文字幕第一区第二区| 91蝌蚪porny| 91精品国产91综合久久蜜臀| 久久超碰97中文字幕| 日韩国产第一页| 亚洲妇熟xx妇色黄| 精品成人无码一区二区三区| 中文字幕中文字幕在线一区 | 色综合久久88色综合天天| 亚洲激情成人在线| 欧美精品黑人猛交高潮| 欧美激情资源网| 亚洲天堂av网站| 久久精品免费在线观看| 99r精品视频| 欧美xxxx老人做受| 北条麻妃一区二区三区| 欧美一区二区三区在线电影| 国产精品一区二区三区网站| 欧美伊人久久久久久久久影院| 日韩成人免费看| tube国产麻豆| 青青国产91久久久久久| 欧美成人777| 日韩不卡一区二区三区| 一起操在线播放| 日韩高清不卡一区二区三区| 九九热最新地址| 蜜臀a∨国产成人精品| 一本大道久久a久久综合婷婷| 蜜臀精品一区二区三区在线观看 | 欧美精品在线视频| 国产九九视频一区二区三区| 欧美日韩在线播放| 国产不卡视频在线播放| 精品人妻中文无码av在线| 亚洲美女视频一区| 亚洲理论片在线观看| 尤物视频一区二区| 任我爽在线视频| 日韩成人免费电影| 欧美自拍偷拍午夜视频| 国产精品一级二级三级| 欧美一二三区精品| 99re8在线精品视频免费播放| xfplay精品久久| 精品一区二区三区四区五区六区| 国产精品三级av| 国产成人无码精品久久二区三| 一区二区三区精品| 四虎永久免费在线| 极品瑜伽女神91| 日韩免费电影网站| 四虎精品一区二区| 精品在线观看一区| 偷拍一区二区三区| 欧美无人高清视频在线观看| 成人中文字幕电影| 久久久精品人体av艺术| av直播在线观看| 亚洲v日本v欧美v久久精品| 色综合久久中文综合久久97| 国产毛片精品国产一区二区三区| 欧美一卡二卡三卡| 娇妻高潮浓精白浆xxⅹ| 亚洲精品高清视频在线观看| 色婷婷在线视频观看| 国产露脸91国语对白| 精品国产123| 波多野结衣一本| 日韩制服丝袜av| 欧美精品在线一区二区三区| 精品人妻人人做人人爽夜夜爽| 亚洲人成亚洲人成在线观看图片 | 日韩在线一区二区三区| 欧美日韩午夜影院| 亚洲国产欧美日韩在线| 亚洲视频中文字幕| 色婷婷综合久久久中文字幕| 成人午夜碰碰视频| 国产精品久久久久久久久免费丝袜 | 综合婷婷亚洲小说| 久草综合在线视频| 成人激情动漫在线观看| 国产精品乱人伦一区二区| 波多野结衣久久久久| 国产成人免费av在线| 国产色婷婷亚洲99精品小说| 国产激情av在线| 国产成a人亚洲| 亚洲人成精品久久久久| 色88888久久久久久影院野外| 99久久精品免费看国产| 亚洲伦理在线免费看| 在线观看亚洲精品视频| wwwxxxx在线观看| 亚洲成人精品一区二区| 欧美一卡2卡3卡4卡| 国产男男chinese网站| 九九在线精品视频| 国产欧美日韩精品一区| www.毛片com| 丰满少妇一区二区三区专区| 亚洲综合激情小说| 91精品婷婷国产综合久久竹菊| 精品中文字幕在线播放| 开心九九激情九九欧美日韩精美视频电影 | 欧美日韩二区三区| 自拍视频一区二区| 久久99国产精品免费| 中文字幕久久午夜不卡| 日本高清不卡视频| 国产精品一区二区人妻喷水| 免费观看在线色综合| 日本一区二区三区在线不卡| 色综合天天综合在线视频| 一区二区三区人妻| 日本成人在线电影网| 国产亚洲精品资源在线26u| 色婷婷综合久色| 国产精品久久AV无码| 国产一区二区三区久久悠悠色av| 国产精品久久久久永久免费观看 | 一区二区在线观看av| 日韩一区二区免费视频| 欧美aaa级片| 91在线精品一区二区| 日韩精品乱码免费| 欧美高清一级片在线观看| 欧美在线观看一区| 永久免费看mv网站入口78| 成人黄页毛片网站| 亚洲成av人影院| 国产欧美日韩精品在线| 欧美日韩黄视频| 娇妻被老王脔到高潮失禁视频| 国产99久久久国产精品潘金| 亚洲午夜免费视频| 久久久久久久av麻豆果冻| 日本乱人伦aⅴ精品| 成人免费毛片糖心| 99亚偷拍自图区亚洲| 免费一级欧美片在线观看| 国产精品成人免费在线| 欧美一区二区三区成人| 成人涩涩小片视频日本| 好吊色视频一区二区三区| 成人永久免费视频| 日本大胆欧美人术艺术动态| 中文字幕在线不卡| 日韩免费观看2025年上映的电影 | 国产熟妇久久777777| av电影一区二区| 久久精品国产亚洲5555| 亚洲精品视频观看| 国产亚洲精品久| 欧美一区二区播放| 91国偷自产一区二区使用方法|