参数验证方式

1.    一般方法

1.1 手动验证

最为普遍常见,略。

1.2 使用扩展方法验证

在C#3.0 中,引入了扩展方法,可以以一种更优雅的方式来进行参数验证,如:

 //参数辅助类
public static class ArgumentHelper
{
public static void RequireRange(this int value, int minValue, int maxValue, string argumentName)
{
if (value > maxValue || value < minValue)
{
throw new ArgumentException(string.Format("The value must be between {0} and {1}", minValue, maxValue), argumentName);
}
} public static void RequireNotNullOrEmpty(this string value, string argumentName)
{
if (string.IsNullOrEmpty(value))
{
throw new ArgumentException("The value can't be null or empty", argumentName);
}
}
} //用户注册
public bool Register(string name, int age)
{
name.RequireNotNullOrEmpty("name");
age.RequireRange(,,"age");
//insert into db
}

2. 使用类型或框架

使用类库

FluentValidationCuttingEdge.ConditionsEnterprise Liberary(Validation Application Block组件),Code Contracts(.NET 4.0正式引用)等。

2.2 使用框架

如ASP.NET MVC的Model中数据标记(Data Annotations) 属性。

参考资料:C# 中参数验证方式的演变

 

全角与半角字符转换

全角空格为12288,半角空格为32,其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248。基于此便不难实现他们之间的转换:

         /// <summary>
///转全角的函数(SBC case)
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
/// </summary>
/// <param name="input">输入</param>
/// <returns></returns>
public static String ToSBC(String input)
{
char[] c = input.ToCharArray(); for (int i = ; i < c.Length; i++)
{
if (c[i] == )
{
c[i] = (char); continue;
} if (c[i] < ) c[i] = (char)(c[i] + );
} return new String(c);
} /// <summary>
///转半角的函数(DBC case)
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static String ToDBC(String input)
{
char[] c = input.ToCharArray(); for (int i = ; i < c.Length; i++)
{
if (c[i] == )
{
c[i] = (char);
continue;
} if (c[i] > && c[i] < ) c[i] = (char)(c[i] - );
} return new String(c);
}

参考资料:C#全角和半角转换

转string时,null的处理:

Convert.ToString能处理字符串为null的情况。ToString方法不能处理字符串为null的情况,会抛出异常。

string/byte[]/MemoryStream/Base64String的相互转换

关系如下图:

1.字符串转比特数组

(1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");

(2)byte[] bt=Convert.FromBase64String("字符串");

2.字符串转流

(1)MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));

(2)MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));

3.流转比特数组

(1)byte[] bt=ms.ToArray();

(2)MemoryStream ms=new MemoryStream();ms.Write(bt,0,ms.Length);

4.流转字符串

(1)string str=Convert.ToBase64String(ms.ToArray());

(2)string str=System.Text.Encoding.Default.GetString(ms.ToArray());

5.比特数组转字符串

(1)string str=System.Text.Encoding.Default.GetString(bt);

(2)string str=Convert.ToBase64String(bt);

6.比特数组转流

(1)MemoryStream ms=new MemoryStream(bt);

(2)MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);

参考资料:字符串string 、byte[]、MemoryStream、Base64String的相互转换

c# 反射Invoke调用方法获得out带出的值

输出参数在最后,基于些获取方法如下:

             var msg = string.Empty;
object[] parameters = new object[] { model, null }; //函数签名为public bool Update(DB_BedInfo model, out string mess);
updateMethod.Invoke(serviceObj, parameters); //parameters[1]即为out带出的值
msg = Convert.ToString(parameters[]);

具名参数和可选参数

  具名参数 和 可选参数 是 C#  4.0 出来的新特性。当有多个可选参数,前面的可选参数不想传时,可使用具名参数解决。

C#知识拾遗的更多相关文章

  1. 我的Python笔记补充:入门知识拾遗

    声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...

  2. python day 8: re模块补充,导入模块,hashlib模块,字符串格式化,模块知识拾遗,requests模块初识

    目录 python day 8 1. re模块补充 2. import模块导入 3. os模块 4. hashlib模块 5. 字符串格式:百分号法与format方法 6. 模块知识拾遗 7. req ...

  3. Java线程知识拾遗

    知识回顾 进程与线程是常常被提到的两个概念.进程拥有独立的代码段.数据空间,线程共享代码段和数据空间,但有独立的栈空间.线程是操作系统调度的最小单位,通常一个进程会包含一个或多个线程.多线程和多进程都 ...

  4. Java基础知识拾遗(一)

    类型提升规则 Java定义了几个应用于表达式的类型提升规则:所有byte.short和char类型的值都被提升为int类型.如果有一个操作数是long类型,将这个表达式提升为 long 类型:如果有一 ...

  5. 洗礼灵魂,修炼python(85)-- 知识拾遗篇 —— 深度剖析让人幽怨的编码

    编码 这篇博文的主题是,编码问题,老生常谈的问题了对吧?从我这一套的文章来看,前面已经提到好多次编码问题了,的确这个确实很重要,这可是难道了很多能人异士的,当你以为你学懂了,在研究爬虫时你发现你错了, ...

  6. javascript基础知识拾遗

    1 下面列出的值被当作假 false null undefined '' 0 NaN 其它所有值被当作是真 console.log(undefined || true); //true console ...

  7. java基础知识拾遗(四)

    1.Runnable对象 启动线程:(new Thread(new MyRunnable()).start() 2.jsp中<%@ page language="java" ...

  8. java基础知识拾遗(三)

    1.类加载 bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类. extension classloader -扩展类加载器,它负责加载JRE的扩展目 ...

  9. java基础知识拾遗(二)

    1.finally public static int func (){ try{ return 1; }catch (Exception e){ return 2; }finally { retur ...

  10. Java基础知识拾遗(一)

    Java Threads 1. 创建线程的三种方法? 继承Thread类: 实现Runnable接口: 使用Executor框架创建一个线程池. 每个线程都有优先级(Thread.MAX_PRIORI ...

随机推荐

  1. HTML——元素

    HTML 元素 HTML 文档由 HTML 元素定义. HTML 元素 开始标签 * 元素内容 结束标签 * <p> 这是一个段落 </p> <a href=" ...

  2. Java调用Javascript、Python算法总结

    最近项目中经常需要将Javascript或者Python中的算法发布为服务,而发布Tomcat服务则需要在Java中调用这些算法,因此就不免要进行跨语言调用,即在Java程序中调用这些算法. 不管是调 ...

  3. LaTeX 公式编辑

    推荐一篇关于LaTeX的文档:<一份不太简短的LATEX 2ε介绍> 1. 常用数学公式符号: 求期望 $\mathbb{E}$ \mathbb{E} 正负无穷 $+\infty$,$-\ ...

  4. Java的自定义注解使用实例

    概念 Java有五个元注解,自动继承java.lang.annotation.Annotation. 什么是元注解,可以理解为其他普通注解进行解释说明 @Target  该注解的使用范围,限定应用场景 ...

  5. SpringBoot启动原理分析

    用了差不多两年的SpringBoot了,可以说对SpringBoot已经很熟了,但是仔细一想SpringBoot的启动流程,还是让自己有点懵逼,不得不说是自己工作和学习的失误,所以以此文对Spring ...

  6. openlayers4 入门开发系列之地图属性查询篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  7. Cesium 实现粒子效果贴地(伪)

    有时我们面对这样的需求,需要在地面上放一个周期性放大缩小的标记,可以使用粒子效果实现,但是粒子效果图片很难贴地(如果你知道怎么做,欢迎分享,期待有人打我脸),我只能变通实现一个看似贴地但实际没有贴地的 ...

  8. 安卓开发笔记(二十一):Android Studio如何创建assets目录

    方法如下: 因为在用WebView控件查看安卓内置网页的时候,必须创建这个资源文件夹,将网页放置在这个目录之下,默认是没有assets这个目录的,这样才可以实现网页代码html.css.javascr ...

  9. pytest进阶之xunit fixture

    前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...

  10. 量化投资技术分析工具---ipython使用

    量化投资实际上就是分析数据从而做出决策的过程python数据处理相关模块NumPy:数组批量计算pandas:灵活的表计算Matplotlib:数据可视化 学习目标:用NumPy+pandas+Mat ...