在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需:

返回值支持泛型和非泛型 先贴上代码:

非泛型返回值类:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.Serialization;
  6.  
  7. namespace WindowsFormsApplication31
  8. {
  9. [Serializable]
  10.  
  11. public class ReturnValue
  12. {
  13. /// <summary>
  14. /// 状态:成功、失败
  15. /// </summary>
  16.  
  17. public bool State
  18. {
  19. get;
  20. protected set;
  21. }
  22.  
  23. /// <summary>
  24. /// 成功消息
  25. /// </summary>
  26.  
  27. public string SuccessMessage
  28. {
  29. get;
  30. protected set;
  31. }
  32.  
  33. /// <summary>
  34. /// 失败消息
  35. /// </summary>
  36.  
  37. public string FailMessage
  38. {
  39. get;
  40. protected set;
  41. }
  42.  
  43. /// <summary>
  44. /// 构造器
  45. /// </summary>
  46. public ReturnValue()
  47. {
  48. this.State = false;
  49. this.SuccessMessage = string.Empty;
  50. this.FailMessage = string.Empty;
  51. }
  52.  
  53. /// <summary>
  54. /// 设置状态
  55. /// </summary>
  56. /// <param name="state">状态</param>
  57. /// <param name="message">消息</param>
  58. private void Load(bool state, string message = "")
  59. {
  60. this.State = state;
  61. if (state)
  62. {
  63. this.SuccessMessage = message;
  64. }
  65. else
  66. {
  67. this.FailMessage = message;
  68. }
  69. }
  70.  
  71. /// <summary>
  72. /// 设置成功
  73. /// </summary>
  74. /// <param name="message">成功消息</param>
  75. public void Success(string message = "")
  76. {
  77. this.Load(true, message);
  78. }
  79.  
  80. /// <summary>
  81. /// 设置失败
  82. /// </summary>
  83. /// <param name="message">失败消息</param>
  84. public void Fail(string message = "")
  85. {
  86. this.Load(false, message);
  87. }
  88. }
  89. }

泛型返回值类:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;
  6. using System.Runtime.Serialization;
  7.  
  8. namespace WindowsFormsApplication31
  9. {
  10. [Serializable]
  11.  
  12. public class ReturnValues<T> : ReturnValue
  13. {
  14. /// <summary>
  15. /// 返回值
  16. /// </summary>
  17.  
  18. public T Value
  19. {
  20. get;
  21. set;
  22. }
  23.  
  24. /// <summary>
  25. /// 设置成功
  26. /// </summary>
  27. /// <param name="value">值</param>
  28. /// <param name="message">成功消息</param>
  29. public void Success(T value = default(T), string message = "")
  30. {
  31. this.State = true;
  32. this.Value = value;
  33. this.SuccessMessage = message;
  34. }
  35. }
  36. }

实例:

1.演示窗体:

通过2个文本框输入信息

第一个开始返回文本验证信息

第二个开始按钮测试

2.关键代码:
非泛型:
  1. #region 返回值(非泛型)
  2. /// <summary>
  3. /// 按钮1
  4. /// </summary>
  5. /// <param name="sender"></param>
  6. /// <param name="e"></param>
  7. private void btnVerifyEmpty_Click(object sender, EventArgs e)
  8. {
  9. ReturnValue rv = VerifyEmpty();
  10. this.ReturnValueHelper(rv);
  11. }
  12.  
  13. /// <summary>
  14. /// 按钮1 测试
  15. /// </summary>
  16. /// <returns></returns>
  17. private ReturnValue VerifyEmpty()
  18. {
  19. ReturnValue rv = new ReturnValue();
  20. if (string.IsNullOrEmpty(this.textBox1.Text.Trim()))
  21. {
  22. rv.Fail("值为空");
  23. }
  24. else
  25. {
  26. rv.Success("值非空");
  27. }
  28. return rv;
  29. }
  30.  
  31. /// <summary>
  32. /// 返回值输出
  33. /// </summary>
  34. /// <param name="rv"></param>
  35. private void ReturnValueHelper(ReturnValue rv)
  36. {
  37. bool state = rv.State;
  38. StringBuilder sb = new StringBuilder();
  39. if (state)
  40. {
  41. sb.AppendLine("返回值状态是:True");
  42. sb.AppendLine("成功消息:" + rv.SuccessMessage);
  43.  
  44. }
  45. else
  46. {
  47. sb.AppendLine("返回值状态是:False");
  48. sb.AppendLine("失败消息:" + rv.FailMessage);
  49. }
  50. MessageBox.Show(sb.ToString());
  51. }
  52. #endregion

泛型:

  1. #region 返回值(泛型)
  2. private void btnQueryStudent_Click(object sender, EventArgs e)
  3. {
  4. //获取姓名
  5. string studentName = this.textBox2.Text.Trim();
  6. //获取返回值
  7. ReturnValues<int> rv = this.GetReturnValues(studentName);
  8. //输出
  9. this.ReturnValuesHelper(rv);
  10.  
  11. }
  12.  
  13. /// <summary>
  14. /// 获取返回值
  15. /// </summary>
  16. /// <param name="rv"></param>
  17. private ReturnValues<int> GetReturnValues(string name)
  18. {
  19. //实例化返回类
  20. ReturnValues<int> rv = new ReturnValues<int>();
  21.  
  22. //构造测试数据,模拟实际开发的取数据操作
  23. Dictionary<string, int> dic = new Dictionary<string, int>();
  24. dic.Add("A", );
  25. dic.Add("B", );
  26. dic.Add("C", );
  27. dic.Add("D", );
  28. dic.Add("E", );
  29.  
  30. //开始判断
  31. if (dic.Keys.Contains(name))
  32. {
  33. rv.Success("数据查找成功");
  34. rv.Value = dic[name];
  35. }
  36. else
  37. {
  38. rv.Fail("数据查找失败");
  39. }
  40. return rv;
  41. }
  42. /// <summary>
  43. /// 返回值输出
  44. /// </summary>
  45. /// <param name="rv"></param>
  46. private void ReturnValuesHelper(ReturnValues<int> rv)
  47. {
  48. bool state = rv.State;
  49. StringBuilder sb = new StringBuilder();
  50. if (state)
  51. {
  52. sb.AppendLine("返回值状态是:True");
  53. sb.AppendLine("成功消息:" + rv.SuccessMessage);
  54. sb.AppendLine("泛型值:" + rv.Value.ToString());
  55.  
  56. }
  57. else
  58. {
  59. sb.AppendLine("返回值状态是:False");
  60. sb.AppendLine("失败消息:" + rv.FailMessage);
  61. }
  62. MessageBox.Show(sb.ToString());
  63. }
  64.  
  65. #endregion
  66. }

3.开始演示:

  1. //第二个文本只能输入A B C D E才提示成功并且可以得到对应的返回值
  2. Dictionary<string, int> dic = new Dictionary<string, int>();
  3. dic.Add("A", );
  4. dic.Add("B", );
  5. dic.Add("C", );
  6. dic.Add("D", );
  7. dic.Add("E", );

源代码下载

C#中返回值封装的更多相关文章

  1. Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题

    在Java中返回值定义为int类型的 方法return 1:中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型. 定义一个Test类,在异常处理try中和finally中分 ...

  2. spring boot 接口返回值封装

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  3. 在Java 线程中返回值的用法

    http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread  有时在执行线程中需要在线程中返回一个值:常规中我们 ...

  4. Lua中返回值的丢失问题

    Lua中返回值的丢失问题 -- 如果函数调用所得的多个返回值是另外一个函数的最后一个参数,或者是多指派表达式中的最后一个参数时,所有返回值将被传入或使用. -- 否则只有第一个返回值被使用或指定. T ...

  5. ABAP SY-SUBRC 使用过程中返回值的几种含义

    当进行Debug的时候,经常会遇到"SY-SUBRC"的返回值.具体如何使用.在各种语句下返回值. ================= FUNCTION MODULE (或RFC中 ...

  6. IOS开发中返回值为null时的处理

    在IOS开发中,如果得到了null返回值很容易造成程序崩溃,null和nil的判断方法不同. nil的判断方法: if(data==nil) {      NSLog(@"data is n ...

  7. C++中返回值

    函数的返回值用于初始化在调用函数是创建的临时对象. 1.返回值为非引用类型: 会将函数的返回值复制给临时对象.跟实参初始化形参的方式一样. 2.返回值为引用类型: 没有复制返回值,返回的是对象本身.返 ...

  8. Java中返回值的详解

    package com.company; //java中main()函数中调用其他方法的两种方式//1.实例化对象 public class returnDemo { public static vo ...

  9. C#调用C++ dll中返回值为字符串的函数问题

    C#调用C++ dll函数,如果返回值为字符串,我们使用string去接收就会报错,因为C++返回的是char*,是个指针,所以c# 要用 IntPtr 来接收. C++: //预编译的标头 .h e ...

随机推荐

  1. Thinking in java学习笔记之finalize

    finalize:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下次垃圾回收动作发生时,才会真正回收对象占用的内存,所以可用此作为对象终结条件的验证.注意的三 ...

  2. sax 解析 xml

    SAX(Simple API for XML) https://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html persons.xml &l ...

  3. dotnet反编译工具大全

    反编译不是为了破解软件,而是在开发时更好的读懂程序干了什么,比如MVC的源码,如果使用1和4的VS插件能更好的进行断点跟踪. 常用,效率最高: 1.[.NET Reflector]首选,能比较好的反编 ...

  4. CCNET+ProGet+Windows Batch搭建全自动的内部包打包和推送及管理平台

    所要用的工具: 1.CCNET(用于检测SVN有改动提交时自动构建,并运行nuget的自动打包和推送批处理) 2.ProGet(目前见到最好用的nuget内部包管理平台) 3.Windows Batc ...

  5. 微软注册dll在dotnet开发时起到缓存的作用

    经过试验,我发觉只要是注册了dll之后,会在全局的环境中得到很好的体现,比如无需指定具体物理路径的dll引用,搜索即可引用等,同时也得到一点: 1.会缓存起这个dll先,在不重启电脑的情况,本地物理路 ...

  6. @EmbeddedId和@idClass的区别

    @idClass 使复合主键类成为非嵌入类,使用 @IdClass 批注为实体指定一个复合主键类(通常由两个或更多基元类型或 JDK 对象类型组成).从原有数据库映射时(此时数据库键由多列组成),通常 ...

  7. 使用Guava来计算笛卡尔积

    以前做项目的时候计算笛卡尔积的时候,总是使用各种for循环来嵌套,最后往往在Sonar代码检查的时候总是会报警说for循环嵌套过深. 今天才知道Guava原来已经为我们提供了优雅的计算笛卡尔积的方法. ...

  8. pythong中字符串strip的用法

    strip的用法是去除字符串中前后两端的xx字符,xx是一个字符数组,并不是去掉“”中的字符串, 数组中包含的字符都要在字符串中去除.默认去掉空格,lstrip则是去掉左边的,rstrip是右边的 见 ...

  9. 同样有缓冲区,为什么bufferedReader输入流不需要清空缓冲区?而bufferedWriter需要清空缓冲区呢?

    当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取, 如果缓冲区数据不足,才会再从文件中读取.清不清空Buf ...

  10. 北京地铁站点遍历最少经站次数问题普遍意义上是一个NP问题,目前不存在多项式时间算法能够解决该问题

    http://www.cnblogs.com/jiel/p/5852591.html 众所周知求一个图的哈密顿回路是一个NPC问题: In the mathematical field of grap ...