c# – 什么时候应该防范null?

前端之家收集整理的这篇文章主要介绍了c# – 什么时候应该防范null?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
什么时候应该防范空论证?理想情况下,我会防范无处不在,但是却变得非常blo肿和乏味.我也注意到,人们并没有把守卫放在像AsyncCallbacks这样的东西上.

为了避免烦人的别人有很多单一的代码,有什么可接受的标准,我应该在哪里防范null?

谢谢.

解决方法

我使用的一个方法null object pattern.
例如,如果一个工厂类基于参数返回接口的不同实现,并且所提供的参数未映射到任何实现,我将返回一个NullObject,
例如
public interface IFoo{
         void Bar();
   }
   public class NullFoo{
       public void Bar(){
          //null behavIoUr 
       }
   }
   public class FooFactory{
        public IFoo CreateFoo(int i){
              switch(i){
                  case 1:
                  return new OneFoo();
                  break;
                  case 2:
                  return new TwoFoo();
                  break;
                  default:
                  return new NullFoo();
                  break;
              }
        } 
   }

当我想从CreateFoo获取一个IFoo时,我不必检查返回的对象是否为空.

显然,这只是众多方法之一.没有“一刀切”,因为null可以意味着不同的东西.

另一种防止空参数的方法是使用CodeContract preconditions.
例如

public void Foo(Bar x){
      Contract.Requires<ArgumentNullException>( x != null,"x" );
      //access x
  }

使用代码合同允许您针对代码运行静态代码分析并捕获诸如Foo(null)之类的错误. (more here)

还有一个为什么要这么做的是使用一个非常简单的通用扩展方法

public static class Ex
{
    public static void EnsureNotNull<T>(this T t,string argName) where T:class
    {
        if(t == null)
        {
            throw new ArgumentNullException(argName);
        }
    }
}

那么你可以检查这样的参数:

public void Foo(Bar x,Bar y){
     x.EnsureNotNull("x");
     y.EnsureNotNull("y");
 }

猜你在找的C#相关文章