在C#中,引用类型的实例作为可空指针传递给函数。例如,请考虑以下代码:
public void f(Class classInstanceRef)
在大多数情况下,该函数将期望一个非空指针(在我的经验中95%的情况下)。如何最好地记录该函数期望一个非空指针的事实?
更新:非常感谢迄今为止您的回复!
public void f(Class classInstanceRef)
在大多数情况下,该函数将期望一个非空指针(在我的经验中95%的情况下)。如何最好地记录该函数期望一个非空指针的事实?
更新:非常感谢迄今为止您的回复!
在.NET 4中,你将能够使用代码合同,这些合同就是为了处理这种情况而设计的:
Contract.Requires(classInstanceRef != null);
同时,我认为适当的文档说明和抛出ArgumentNullException
是可以接受的。
1)确保该方法拒绝任何空值
if (instanceRef == null)
{
throw new ArgumentNullException("instanceRef");
}
2) 添加
/// <exception cref="T:System.ArgumentNullException"> is thrown
/// when <paramref name="instanceRef"/> is <c>null</c></exception>
请查看代码合同库: http://research.microsoft.com/en-us/projects/contracts/
它使您能够指定代码的前提条件,并使用代码库的静态分析进行验证:
Contract.Requires( x ! = null );
这个库将被包含在.NET Framework v4中,而之前版本的框架需要商业许可证。
Debug.Assert(classInstanceRef != null);
我会像这样做:
/// <summary>
/// Does stuff
/// </summary>
/// <param name="classInstanceRef">some documentation</param>
/// <exception cref="ArgumentNullException">Thrown when the <paramref name="classInstanceRef"/> is null.</exception>
public void f(Class classInstanceRef)
{
if (classInstanceRef == null)
throw new ArgumentNullException("classInstanceRef");
}
if(classInstanceRef == null) { throw new NullReferenceException("classInstanceRef"); }
?
///<remarks>classInstanceRef cannot be null</remarks>
ArgumentNullException
而非ArgumentException
。 - Martin LiversageArgumentNullException
吗? - LukeH