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

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

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

      這個(gè)世界的問題在于聰明人充滿疑惑,而傻子們堅(jiān)信不疑。--羅素
         1: public static bool IsDefault<T>(this T value) 
         2: {
         3:       //...
         4: }

      1. ==的問題

          如果用==直接判斷(default(T) == value),編譯時(shí)會(huì)提示錯(cuò)誤:Error CS0019: 運(yùn)算符“==”無法應(yīng)用于“T”和“T”類型的操作數(shù) (CS0019)。

       

      2. object.Equals的問題

          object提供了一個(gè)靜態(tài)方法,可用于比較兩個(gè)對(duì)象是否相等:

         1: public static bool Equals(object objA, object objB)
         2: {
         3:     if (objA == objB)
         4:     {
         5:         return true;
         6:     }
         7:     if (objA == null || objB == null)
         8:     {
         9:         return false;
        10:     }
        11:     return objA.Equals(objB);
        12: }

         但是該方法接收的是引用類型的實(shí)例,如果傳入的是值類型(譬如int、enum、struct等),則會(huì)對(duì)值類型進(jìn)行裝箱(boxing)。
         

      3. EqualityComparer<T>.Default.Equals

          最給力的方法,還是用EqualityComparer<T>.Default.Equals,

         1: public static bool IsDefault<T>(this T value) 
         2: {
         3:      return EqualityComparer<T>.Default.Equals(value, default(T)); 
         4: }

         其實(shí)現(xiàn)了一個(gè)默認(rèn)的比較器,可以比較Byte、Nullable<T>、Enum、Object、以及實(shí)現(xiàn)了IEquatable<T>接口(譬如int、bool、自定義類型等)的所有類型,可以用ILSpy來查看該類型的具體實(shí)現(xiàn):

         1: private static EqualityComparer<T> defaultComparer;
         2: public static EqualityComparer<T> Default
         3: {
         4:     [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries"), SecuritySafeCritical]
         5:     get
         6:     {
         7:         EqualityComparer<T> equalityComparer = EqualityComparer<T>.defaultComparer;
         8:         if (equalityComparer == null)
         9:         {
        10:             equalityComparer = EqualityComparer<T>.CreateComparer();
        11:             EqualityComparer<T>.defaultComparer = equalityComparer;
        12:         }
        13:         return equalityComparer;
        14:     }
        15: }
        16: [SecuritySafeCritical]
        17: private static EqualityComparer<T> CreateComparer()
        18: {
        19:     RuntimeType runtimeType = (RuntimeType)typeof(T);
        20:     if (runtimeType == typeof(byte))//其實(shí)byte也實(shí)現(xiàn)了IEquatable<Byte>,不知道為神馬要把byte單獨(dú)提出來???
        21:     {
        22:         return (EqualityComparer<T>)new ByteEqualityComparer();
        23:     }
        24:     if (typeof(IEquatable<T>).IsAssignableFrom(runtimeType))//如果類型實(shí)現(xiàn)了IEquatable<T>,則在運(yùn)行時(shí)構(gòu)造GenericEqualityComparer<T>,調(diào)用類型自身提供(重寫)的equals方法。
        25:     {
        26:         return (EqualityComparer<T>)RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter((RuntimeType)typeof(GenericEqualityComparer<int>), runtimeType);
        27:     }
        28:     if (runtimeType.IsGenericType && runtimeType.GetGenericTypeDefinition() == typeof(Nullable))
        29:     {
        30:         RuntimeType runtimeType2 = (RuntimeType)runtimeType.GetGenericArguments()[0];
        31:         if (typeof(IEquatable).MakeGenericType(new Type[]
        32:         {
        33:             runtimeType2
        34:         }).IsAssignableFrom(runtimeType2))
        35:         {
        36:             return (EqualityComparer<T>)RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter((RuntimeType)typeof(NullableEqualityComparer<int>), runtimeType2);
        37:         }
        38:     }
        39:     if (runtimeType.IsEnum && Enum.GetUnderlyingType(runtimeType) == typeof(int))
        40:     {
        41:         return (EqualityComparer<T>)RuntimeTypeHandle.CreateInstanceForAnotherGenericParameter((RuntimeType)typeof(EnumEqualityComparer<int>), runtimeType);
        42:     }
        43:     return new ObjectEqualityComparer<T>();
        44: }

       

      4. ILSpy比JustDecompile強(qiáng)大呀

      4.1. ObjectEqualityComparer<T>.Equals方法的比較

      image

      clip_image001

       

      4.2. EqualityComparer<T>.CreateComparer()方法:

      image

      各種杯具。。。

       

      posted on 2011-06-21 23:00  Silent Void  閱讀(7176)  評(píng)論(1)    收藏  舉報(bào)

      主站蜘蛛池模板: 亚洲伊人久久综合影院| 欧美巨大极度另类| 色偷偷亚洲女人天堂观看| 综合色一色综合久久网| 无码国内精品久久人妻蜜桃| 午夜色无码大片在线观看免费| 国内偷自第一区二区三区| 成人精品一区二区三区四| 黄色三级亚洲男人的天堂| 成人免费无遮挡在线播放| 天堂V亚洲国产V第一次| 国产成人久久综合第一区| 猫咪网网站免费观看| 日韩精品一区二区三区中文无码 | 免费激情网址| 日本一区二区精品色超碰| 风流老熟女一区二区三区 | 香蕉EEWW99国产精选免费| 亚洲综合无码AV在线观看| 亚洲精品无码av天堂| 日本伊人色综合网| 国产毛片精品av一区二区| 巴中市| 国产精品大片中文字幕| 国内精品久久久久影视| 免费无码又爽又刺激高潮的app| 精品久久久bbbb人妻| 国产精品久久毛片| 欧美黑人又粗又大又爽免费| 延寿县| 国产精品v片在线观看不卡| 成人污视频| 久久精品亚洲日本波多野结衣| 久久精品国产亚洲AⅤ无码| 亚洲成a人v欧美综合天堂下载 | 日日碰狠狠添天天爽五月婷| 亚洲综合精品一区二区三区| 国产精品亚洲一区二区z| 精品国产精品午夜福利| 99精品热在线在线观看视| 久久午夜私人影院|