網(wǎng)站首頁 編程語言 正文
場景
很多情況下,我們?cè)谑褂煤瘮?shù)的時(shí)候,需要return多個(gè)返回值,比如說需要獲取處理的狀態(tài)以及信息、結(jié)果集等。最古老的時(shí)候,有用ref或者out來處理這個(gè)情況,但是需要定義處理等操作之類的,而且書寫也不是很舒服,感覺就是不太完美;后來有了dynamic后,覺得也是個(gè)不錯(cuò)的選擇,可惜也有很多局限性,比如:匿名類無法序列化、返回結(jié)果不夠直觀等。再然后就寫一個(gè)結(jié)構(gòu)化的對(duì)象來接收,但是如果每個(gè)方法都定義一個(gè)對(duì)象去接收的話,想必也會(huì)很麻煩;
需求
所以,綜上場景所述,我們可以寫一個(gè)比較通用的返回值對(duì)象,然后使用泛型來傳遞需要return的數(shù)據(jù)。
開發(fā)環(huán)境
.NET Framework版本:4.5
開發(fā)工具
?Visual Studio 2013
實(shí)現(xiàn)代碼
[Serializable]
public class ReturnResult
{
public ReturnResult(Result _result, string _msg)
{
this.result = _result;
this.msg = _result == Result.success ? "操作成功!" + _msg : "操作失敗!" + _msg;
}
public ReturnResult(Result _result)
: this(_result, "")
{
}
public Result result { get; set; }
public string msg { get; set; }
}
[Serializable]
public class ReturnResult<T> : ReturnResult
{
public ReturnResult(T _data)
: base(Result.success)
{
this.data = _data;
}
public ReturnResult(Result _result, string _msg)
: base(_result, _msg)
{
}
public ReturnResult(Result _result, string _msg, T _data)
: base(_result, _msg)
{
this.data = _data;
}
public T data { get; set; }
}
public enum Result
{
error = 0,
success = 1
}
public ReturnResult<string> GetMsg()
{
return new ReturnResult<string>("msg");
}
public ReturnResult<int> GetCode()
{
return new ReturnResult<int>(10);
}
public ReturnResult<Student> GetInfo()
{
Student student = new Student
{
id = 1,
name = "張三"
};
return new ReturnResult<Student>(student);
}
public class Student
{
public int id { get; set; }
public string name { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
var result = GetCode();
if (result.result == Result.success)
{
MessageBox.Show(result.msg + result.data);
}
}
private void button2_Click(object sender, EventArgs e)
{
var result = GetMsg();
if (result.result == Result.success)
{
MessageBox.Show(result.msg + result.data);
}
}
private void button3_Click(object sender, EventArgs e)
{
var result = GetInfo();
if (result.result == Result.success)
{
MessageBox.Show(result.msg + Newtonsoft.Json.JsonConvert.SerializeObject(result.data));
}
}
實(shí)現(xiàn)效果
代碼解析:挺簡單的,也沒啥可解釋的。
原文鏈接:https://mp.weixin.qq.com/s/rUvJrdFcBJtMBYPMjgOAOw
相關(guān)推薦
- 2023-03-20 C#?Path類---文件路徑解讀_C#教程
- 2022-10-05 redis?哨兵集群搭建的實(shí)現(xiàn)_Redis
- 2023-03-03 詳解Flask框架中Flask-Login模塊的使用_python
- 2022-11-02 Android?shape標(biāo)簽使用方法介紹_Android
- 2022-04-20 Prism區(qū)域管理器IRegionManager用法介紹_實(shí)用技巧
- 2022-11-18 詳解Pandas如何高效對(duì)比處理DataFrame的兩列數(shù)據(jù)_python
- 2022-05-15 C++中類的轉(zhuǎn)換函數(shù)你了解嗎_C 語言
- 2022-04-10 用python實(shí)現(xiàn)讀取xlsx表格操作_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支