哪个/什么是Error.ArgumentNull()?

Jon*_*ric 8 .net c#

有时我在代码示例中看到这个:

throw Error.ArgumentNull("someParameter");
Run Code Online (Sandbox Code Playgroud)

这里有一个例子在这里,上线89.

我想Error在我自己的代码中使用.我在哪里可以找到它?

(我试图自己找到它,我尝试using了该文件顶部的命名空间,我试图让Visual Studio找到它,到目前为止没有运气.)

Dan*_*ker 8

它是由图书馆的创建者定义的帮助类,使他们的生活更轻松.

Error.cs文件:

internal static ArgumentNullException ArgumentNull(string parameterName, string messageFormat, params object[] messageArgs)
{
    return new ArgumentNullException(parameterName, Error.Format(messageFormat, messageArgs));
}
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找类似的功能,请查看代码约定(适用于Visual Studio的非Express版本).然后你可以这样写:

using System.Diagnostics.Contracts;

void MyMethod(string someParameter)
{
    Contract.Requires<ArgumentNullException>(someParameter != null);

    // ...
}
Run Code Online (Sandbox Code Playgroud)

...如果未满足此条件,它将在运行时抛出异常.


Tim*_*ora 5

它是一个内部帮助类,具有internal可见性.这就是你无法找到它的原因.

Microsoft源代码在各种地方使用此模式.

但为什么呢?它使您能够抛出一致的,格式良好的本地化异常,而无需将该逻辑放在每个异常处理程序中.

更进一步,某些定义甚至包含编译器指令,例如:

        internal static ArgumentException InvalidEnumArgument( string parameterName, int invalidValue, Type enumClass ) {
#if NETFX_CORE
            return new ArgumentException(Error.Format(CommonWebApiResources.InvalidEnumArgument, parameterName, invalidValue, enumClass.Name), parameterName);
#else
            return new InvalidEnumArgumentException( parameterName, invalidValue, enumClass );
#endif
        }
Run Code Online (Sandbox Code Playgroud)

其他方法(如PropertyNull())用代码分析抑制消息修饰.

同样,它只是一个便利/一致性机制,以避免在整个地方重复此代码.

我可能不建议尝试在您自己的项目中使用这个确切的代码,因为您的需求会有所不同.但你当然可以将它用作模式.