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

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

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

        系統(tǒng)要求方法都返回 Result 結(jié)果,通常我們會如此定義一個 Result

       1     public class Result<T>
       2     {
       3         public virtual int Code { get; set; }
       4 
       5         public virtual T Data { get; set; }
       6 
       7         public virtual string Message { get; set; }
       8     }
       9 
      10     public class Result : Result<object>
      11     {
      12         // 快速創(chuàng)建成功結(jié)果
      13         public static Result<T> Success<T>(T data)
      14         {
      15             return new Result<T>() { Data = data };
      16         }
      17 
      18         // 快速創(chuàng)建失敗結(jié)果
      19         public static Result<T> Fail<T>(int code, string message)
      20         {
      21             return new Result<T>() { Code = code, Message = message };
      22         }
      23     }

        得益于C#強大的類型推斷,我們可以非常簡單的返回成功或失敗結(jié)果

       1     public Result<User> GetUser(int userId)
       2     {
       3         User user = null; // Read from database
       4         if (user == null)
       5         {
       6             return Result.Fail<User>(400, "用戶不存在");  // 需要手動指明 User,有點煩
       7         }
       8         else
       9         {
      10             return Result.Success(user);
      11         }
      12     }

        成功的時候,Success() 方法可以自動推斷出Data為 User 類;

        但是失敗的時候,必須手動的指明Data為 User 類,雖然僅僅多敲了幾個字母,但我還是想簡化,因為失敗時,Data根本不需要賦值,也不在乎Data 的類型。

        C# 可以使用 Implicit 自定義隱式轉(zhuǎn)換,可以將 Result 自動隱式轉(zhuǎn)換轉(zhuǎn)換為 Result<T>,考慮到我們只需要在失敗的時候才轉(zhuǎn)換,所以我定義了一個  FailResult

       1     public class FailResult : Result
       2     {
       3     }
       4 
       5     public class Result<T>
       6     {
       7         // 新增加的隱式轉(zhuǎn)換
       8         public static implicit operator Result<T>(FailResult failResult)
       9         {
      10             return new Result<T>() { Code = failResult.Code, Message = failResult.Message };
      11         }
      12     }
      13 
      14     public class Result : Result<object>
      15     {
      16         // 新增加的方法
      17         public static FailResult Fail(int code, string message)
      18         {
      19             return new FailResult() { Code = code, Message = message };
      20         }
      21     }

        這樣的話,不論時成功還是失敗,我們都不需要指定Data 的類型了

       1     public Result<User> GetUser(int userId)
       2     {
       3         User user = null; // Read from database
       4         if (user == null)
       5         {
       6             return Result.Fail(400, "用戶不存在"); // 不用指明 <User> 了
       7         }
       8         else
       9         {
      10             return Result.Success(user);
      11         }
      12     }

        心細(xì)的朋友會發(fā)現(xiàn),這種 Result.Fail 其實是先 new 一個 FailResult,然后編譯器再 new 一個 Result<T>, 事實上多創(chuàng)建了一個無用的實例,但我覺得對于CLR而言這種開銷可以忽略不記。

        

        下面是完整的代碼:

       1 using System;
       2 
       3 namespace ConsoleApp1
       4 {
       5     class Program
       6     {
       7         static void Main(string[] args)
       8         {
       9             Console.WriteLine("Hello World!");
      10         }
      11 
      12         public Result<User> GetUser(int userId)
      13         {
      14             User user = null; // Read from database
      15             if (user == null)
      16             {
      17                 return Result.Fail(400, "用戶不存在"); // 不用指明 <User> 了
      18                 //return Result.Fail<User>(400, "用戶不存在");
      19             }
      20             else
      21             {
      22                 return Result.Success(user);
      23             }
      24         }
      25     }
      26 
      27     public class Result<T>
      28     {
      29         public virtual int Code { get; set; }
      30 
      31         public virtual T Data { get; set; }
      32 
      33         public virtual string Message { get; set; }
      34 
      35 
      36         public static implicit operator Result<T>(FailResult failResult)
      37         {
      38             return new Result<T>() { Code = failResult.Code, Message = failResult.Message };
      39         }
      40     }
      41 
      42     public class Result : Result<object>
      43     {
      44         public static Result<T> Success<T>(T data)
      45         {
      46             return new Result<T>() { Data = data };
      47         }
      48 
      49         public static Result<T> Fail<T>(int code, string message)
      50         {
      51             return new Result<T>() { Code = code, Message = message };
      52         }
      53 
      54         public static FailResult Fail(int code, string message)
      55         {
      56             return new FailResult() { Code = code, Message = message };
      57         }
      58     }
      59 
      60     public class FailResult : Result 
      61     { 
      62     }
      63 
      64     public class User
      65     { 
      66     }
      67 }
      View Code

       

      posted on 2022-08-24 20:38  zhouandke  閱讀(445)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 中文字幕在线永久免费视频| 最新国产精品拍自在线播放| 人妻夜夜爽天天爽| 亚洲婷婷综合色高清在线| 亚洲精品久荜中文字幕| 鲜嫩高中生无套进入| 亚洲精品中文字幕在线观| 美女自卫慰黄网站| 国产精品普通话国语对白露脸 | 欧美性xxxxx极品| 美女裸体视频永久免费| 精品自拍自产一区二区三区| 国内不卡一区二区三区| 麻豆成人精品国产免费| 久久av高潮av喷水av无码| 加勒比亚洲视频在线播放| 亚洲一区二区三区四区| 国产真人做受视频在线观看| 无翼乌口工全彩无遮挡h全彩| 国产亚洲中文字幕久久网| 最新国产AV最新国产在钱| 亚洲色在线V中文字幕| 我要看亚洲黄色太黄一级黄| 99热成人精品热久久66| 麻豆av一区二区三区| 99精品久久久中文字幕| 长丰县| 男人猛躁进女人免费播放| 9191国语精品高清在线| 久久国产免费观看精品3| 日韩精品亚洲不卡一区二区| 口爆少妇在线视频免费观看| 伊人春色激情综合激情网| 午夜射精日本三级| 上司人妻互换中文字幕| 国产午夜福利视频在线| 国产精品色内内在线播放| 安平县| 国产精品亚洲综合色区丝瓜| 亚洲中文字幕日韩精品| 亚洲国产精品综合久久20|