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

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

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

      跟著AutoMapper學反射,你學會了嗎?

      最近看AutoMapper源碼,被1行代碼震驚到了。

      請各位工程師也look一下:

      private static readonly MethodInfo ContextMapMethod =
          ExpressionFactory.Method<ResolutionContext, object>(a => a.Map<object, object>(null, null, null)).GetGenericMethodDefinition(); 

      看到這個代碼本人震驚到了。

      第一眼的反應是出bug了,測試代碼寫錯地方了,那些object和null是認真的嗎?

      但直覺這不可能是bug!!!

       

      一、趕緊測試一下

      1. 于是把部分代碼復制過來做了一個簡單的測試

      public static MethodInfo Method<T>(Expression<Func<T>> expression) => GetExpressionBodyMethod(expression);
      
      public static MethodInfo Method<TType, TResult>(Expression<Func<TType, TResult>> expression) => GetExpressionBodyMethod(expression);
      
      private static MethodInfo GetExpressionBodyMethod(LambdaExpression expression) => ((MethodCallExpression)expression.Body).Method;
      public static int Sqrt(int x)
          => x * x;
      
      int x = 3;
      var sqrtMethod = Method<int, int>(x => Sqrt(x));
      var result = sqrtMethod.Invoke(null, [x]);
      // result = 9

      不出意料,非常成功

      2. 以前怎么反射方法呢

      var sqrtMethod0 = typeof(MyTests).GetMethod("Sqrt");

      3. 那兩種方法哪種更好呢

      初看原來的方法更簡單,其實不然。

      其一、原方法寫死方法名

      如果方法重命名,甚至增減參數,只有到運行時才報錯,簡直是埋了顆地雷啊

      新方法就不一樣了,重命名用vs重構就能直接適應

      參數增、減可能會直接導致編譯出錯,以便及時處理

      其二、如果方法有重載,更顯得新方法的優勢

      var sqrtMethod0 = typeof(MyTests).GetMethod("Sqrt", BindingFlags.Static | BindingFlags.Public, [typeof(int)]);

      方法有重載就需要提供參數類型列表和修飾符,新方法都不用,表達式就像用指針調用方法一樣

       

      二、這種方法還可以變通使用

      1. 再建一個新的輔助方法

      public static MethodInfo GetActionMethodInfo<TArgument>(Expression<Action<TArgument>> expression)
          => GetExpressionBodyMethod(expression);

      2. 重寫前面的例子

      var sqrtMethod2 = GetActionMethodInfo<int>(x => Sqrt(x));

      用Action的表達式反射Func,是不是很神奇

      再結合.net的協變和逆變,能用更簡單的方式構建調用方法的表達式

      只要能構建一個調用方法的表達式就能反射出該方法

       

      三、用表達式還可以反射屬性、字段、索引器和構造函數等

       

      通過.net表達式來反射是不是更優雅,今天的內容你學會了嗎? 

       

      posted on 2025-08-19 11:31  xiangji  閱讀(57)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产午夜精品福利在线观看| 国产综合色一区二区三区| 罗江县| 国产精品一区二区麻豆蜜桃| 山东省| 国产久免费热视频在线观看| 欧美成人精品高清在线播放| 精品视频在线观看免费观看| 亚洲一区二区精品动漫| 五月天天天综合精品无码| 亚洲真人无码永久在线| 人妻少妇精品无码专区| 国产性三级高清在线观看| 99在线 | 亚洲| xbox免费观看高清视频的软件| 亚洲日韩精品无码一区二区三区| 国产精品人成视频免费国产| 久久天天躁夜夜躁一区| 亚洲日韩国产精品第一页一区 | 韩国精品福利视频一区二区| 国产一区精品综亚洲av| 视频一区二区不中文字幕| 国产成人综合在线观看不卡| 中文无码高潮到痉挛在线视频| 成人国产精品日本在线观看| 91麻豆视频国产一区二区| 亚洲欧美日韩综合久久| 人人妻人人澡人人爽| 国产午夜福利在线视频| 辽阳县| 中国老太婆video| 人人玩人人添人人澡超碰| 欧美黑人添添高潮a片www| www插插插无码免费视频网站 | 亚洲综合精品中文字幕| 成人免费ā片在线观看| 国产精品自拍一二三四区| 亚洲日本欧美日韩中文字幕| 国产午夜福利小视频在线| 国产成AV人片久青草影院| 99久久精品国产一区二区蜜芽|