C#中返回值封装
在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需:
返回值支持泛型和非泛型 先贴上代码:
非泛型返回值类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization; namespace WindowsFormsApplication31
{
[Serializable] public class ReturnValue
{
/// <summary>
/// 状态:成功、失败
/// </summary> public bool State
{
get;
protected set;
} /// <summary>
/// 成功消息
/// </summary> public string SuccessMessage
{
get;
protected set;
} /// <summary>
/// 失败消息
/// </summary> public string FailMessage
{
get;
protected set;
} /// <summary>
/// 构造器
/// </summary>
public ReturnValue()
{
this.State = false;
this.SuccessMessage = string.Empty;
this.FailMessage = string.Empty;
} /// <summary>
/// 设置状态
/// </summary>
/// <param name="state">状态</param>
/// <param name="message">消息</param>
private void Load(bool state, string message = "")
{
this.State = state;
if (state)
{
this.SuccessMessage = message;
}
else
{
this.FailMessage = message;
}
} /// <summary>
/// 设置成功
/// </summary>
/// <param name="message">成功消息</param>
public void Success(string message = "")
{
this.Load(true, message);
} /// <summary>
/// 设置失败
/// </summary>
/// <param name="message">失败消息</param>
public void Fail(string message = "")
{
this.Load(false, message);
}
}
}
泛型返回值类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Runtime.Serialization; namespace WindowsFormsApplication31
{
[Serializable] public class ReturnValues<T> : ReturnValue
{
/// <summary>
/// 返回值
/// </summary> public T Value
{
get;
set;
} /// <summary>
/// 设置成功
/// </summary>
/// <param name="value">值</param>
/// <param name="message">成功消息</param>
public void Success(T value = default(T), string message = "")
{
this.State = true;
this.Value = value;
this.SuccessMessage = message;
}
}
}
实例:
1.演示窗体:

通过2个文本框输入信息
第一个开始返回文本验证信息
第二个开始按钮测试
#region 返回值(非泛型)
/// <summary>
/// 按钮1
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnVerifyEmpty_Click(object sender, EventArgs e)
{
ReturnValue rv = VerifyEmpty();
this.ReturnValueHelper(rv);
} /// <summary>
/// 按钮1 测试
/// </summary>
/// <returns></returns>
private ReturnValue VerifyEmpty()
{
ReturnValue rv = new ReturnValue();
if (string.IsNullOrEmpty(this.textBox1.Text.Trim()))
{
rv.Fail("值为空");
}
else
{
rv.Success("值非空");
}
return rv;
} /// <summary>
/// 返回值输出
/// </summary>
/// <param name="rv"></param>
private void ReturnValueHelper(ReturnValue rv)
{
bool state = rv.State;
StringBuilder sb = new StringBuilder();
if (state)
{
sb.AppendLine("返回值状态是:True");
sb.AppendLine("成功消息:" + rv.SuccessMessage); }
else
{
sb.AppendLine("返回值状态是:False");
sb.AppendLine("失败消息:" + rv.FailMessage);
}
MessageBox.Show(sb.ToString());
}
#endregion
泛型:
#region 返回值(泛型)
private void btnQueryStudent_Click(object sender, EventArgs e)
{
//获取姓名
string studentName = this.textBox2.Text.Trim();
//获取返回值
ReturnValues<int> rv = this.GetReturnValues(studentName);
//输出
this.ReturnValuesHelper(rv); } /// <summary>
/// 获取返回值
/// </summary>
/// <param name="rv"></param>
private ReturnValues<int> GetReturnValues(string name)
{
//实例化返回类
ReturnValues<int> rv = new ReturnValues<int>(); //构造测试数据,模拟实际开发的取数据操作
Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("A", );
dic.Add("B", );
dic.Add("C", );
dic.Add("D", );
dic.Add("E", ); //开始判断
if (dic.Keys.Contains(name))
{
rv.Success("数据查找成功");
rv.Value = dic[name];
}
else
{
rv.Fail("数据查找失败");
}
return rv;
}
/// <summary>
/// 返回值输出
/// </summary>
/// <param name="rv"></param>
private void ReturnValuesHelper(ReturnValues<int> rv)
{
bool state = rv.State;
StringBuilder sb = new StringBuilder();
if (state)
{
sb.AppendLine("返回值状态是:True");
sb.AppendLine("成功消息:" + rv.SuccessMessage);
sb.AppendLine("泛型值:" + rv.Value.ToString()); }
else
{
sb.AppendLine("返回值状态是:False");
sb.AppendLine("失败消息:" + rv.FailMessage);
}
MessageBox.Show(sb.ToString());
} #endregion
}
3.开始演示:
//第二个文本只能输入A B C D E才提示成功并且可以得到对应的返回值
Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("A", );
dic.Add("B", );
dic.Add("C", );
dic.Add("D", );
dic.Add("E", );

C#中返回值封装的更多相关文章
- Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题
在Java中返回值定义为int类型的 方法return 1:中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型. 定义一个Test类,在异常处理try中和finally中分 ...
- spring boot 接口返回值封装
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- 在Java 线程中返回值的用法
http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread 有时在执行线程中需要在线程中返回一个值:常规中我们 ...
- Lua中返回值的丢失问题
Lua中返回值的丢失问题 -- 如果函数调用所得的多个返回值是另外一个函数的最后一个参数,或者是多指派表达式中的最后一个参数时,所有返回值将被传入或使用. -- 否则只有第一个返回值被使用或指定. T ...
- ABAP SY-SUBRC 使用过程中返回值的几种含义
当进行Debug的时候,经常会遇到"SY-SUBRC"的返回值.具体如何使用.在各种语句下返回值. ================= FUNCTION MODULE (或RFC中 ...
- IOS开发中返回值为null时的处理
在IOS开发中,如果得到了null返回值很容易造成程序崩溃,null和nil的判断方法不同. nil的判断方法: if(data==nil) { NSLog(@"data is n ...
- C++中返回值
函数的返回值用于初始化在调用函数是创建的临时对象. 1.返回值为非引用类型: 会将函数的返回值复制给临时对象.跟实参初始化形参的方式一样. 2.返回值为引用类型: 没有复制返回值,返回的是对象本身.返 ...
- Java中返回值的详解
package com.company; //java中main()函数中调用其他方法的两种方式//1.实例化对象 public class returnDemo { public static vo ...
- C#调用C++ dll中返回值为字符串的函数问题
C#调用C++ dll函数,如果返回值为字符串,我们使用string去接收就会报错,因为C++返回的是char*,是个指针,所以c# 要用 IntPtr 来接收. C++: //预编译的标头 .h e ...
随机推荐
- 【转】Handler学习笔记(二)
一.一个问题 有这样一个问题值得我们思考,若把一些类似于下载的功能(既耗时且不一定有结果)写在Activity(主线程)里,会导致Activity阻塞,长时间无响应,直至页面假死(如果5秒钟还没有完成 ...
- 【UOJ#33】【UR#2】树上GCD 有根树点分治 + 容斥原理 + 分块
#33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...
- jdbc实现事务
//conn需要自己获取,这里我用的时springjdbcTemplate Connection conn = null; PreparedStatement pstm = null; try { c ...
- springMVC-配置Bean
配置Bean - 配置形式:基于xml文件方式,基于注解的方式- bean的配置方式:通过全类名(反射),通过工厂方法(静态工厂方法和实例工厂方法),FactoryBean依赖注入的方方式,属性注入和 ...
- Markdown编辑器简单总结
字体大小: #1 ##2 添加链接: 文字链接 [blog](http://yalantis.com/blog/how_we_created_tab_bar_animation_for_ios/?ut ...
- 【Alpha版本】冲刺-Day7
队伍:606notconnected 会议时间:11月15日 会议总结 张斯巍(433) 今天安排:上传界面设计 完成度:95% 明天计划:回收站界面设计 遇到的问题:无 感想:从一开始界面风格就要确 ...
- linux 设置mysql 数据库编码utf8
转载地址http://www.linuxidc.com/Linux/2015-08/121676.htm在MySQL数据库中, 当插入数据无法支持中文时, 可将该数据库的编码集设置为utf8, 故在创 ...
- JavaWeb学习总结-07 Filter 学习和使用
一 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...
- BZOJ1691: [Usaco2007 Dec]挑剔的美食家
传送门: 一句话题解:贪心+treap 好几天前刚学的treap,然后真到了考treap又写不出来,这么辣鸡还搞什么OI 先按$A_i$递减排序,然后把$C_i$也递减排序,然后用一个指针指向$M$序 ...
- Visual Studio 当前上下文中不存在名称“ConfigurationManager”
Visual Studio调试出现错误:当前上下文中不存在名称“ConfigurationManager” 解决方法: 1.System.Configuration引用这个dll参考:http://k ...