我今天讨论了重构这个问题(#1)
public void MyFunc(object myArgument)
{
if(myArgument == null)
throw new ArgumentNullException("myArgument");
....
Run Code Online (Sandbox Code Playgroud)
有了这个(#2)
//inside a shared assembly in a class called Guard
public static void AgainstArgumentNull(object obj, string message)
{
if (obj == null)
throw new ArgumentNullException(message);
}
public void MyFunc(object myArgument)
{
Guard.AgainstArgumentNull(myArgument, "myArgument");
....
Run Code Online (Sandbox Code Playgroud)
我的直觉是#1更好,原因如下:
我的问题是:我的直觉是否正确?在某些情况下,我们从另一个程序集中抛出异常的事实可能不会成为问题吗?
对于这种特殊情况,您无论如何都不应该使用Guard。您应该使用代码合同。
Contract.Requires(myArgument != null);
Run Code Online (Sandbox Code Playgroud)