比如这个例子:
public static Time Parse(string value) { string regXExpres = "^([0-9]|[0-1][0-9]|2[0-3]):([0-9]|[0-5][0-9])$|^24:(0|00)$"; Contract.Requires(value != null); Contract.Requires(new Regex(regXExpres).IsMatch(value)); string[] tokens = value.Split(':'); int hour = Convert.ToInt32(tokens[0], CultureInfo.InvariantCulture); int minute = Convert.ToInt32(tokens[1], CultureInfo.InvariantCulture); return new Time(hour, minute); }
public static Time Parse(string value) { if (value == null) { throw new ArgumentNullException("value"); } string[] tokens = value.Split(':'); if (tokens.Length != 2) { throw new FormatException("value must be h:m"); } int hour = Convert.ToInt32(tokens[0], CultureInfo.InvariantCulture); if (!(0 <= hour && hour <= 24)) { throw new FormatException("hour must be between 0 and 24"); } int minute = Convert.ToInt32(tokens[1], CultureInfo.InvariantCulture); if (!(0 <= minute && minute <= 59)) { throw new FormatException("minute must be between 0 and 59"); } return new Time(hour, minute); }
问题:
我能否使用Contract.Requires()来代替那些If(){ throw } 来进行参数验证,然后抛出自己定义的异常?
本人刚刚接触Code Contracts,因为我不想代码当中老是重复使用if(){ throw }进行参数验证,做很多重复工,想找一种更简洁有效的编码方式。或者使用类似:Throw.ArgumentNull();
PS:各位有关于这方面的资源或者建议,请多多指点^_^
可以,不过默认是Contract.Require是啥都不干的,需要安装Code Contracts Dev插件,并且将检查选项开启到。 ReleaseRequiresReleaseRequires以上,这样它和if throw的效果是一样的 。
具体的可以看我以前写的文章:http://www.cnblogs.com/TianFang/p/3485005.html
谢谢,基本上明白怎么用啦^_^