Where/what is Error.ArgumentNull()?

本文关键字:ArgumentNull Error what is Where | 更新日期: 2023-09-27 18:06:28

有时我在代码示例中看到这种情况:

throw Error.ArgumentNull("someParameter");

这里有一个例子,在第89行

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

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

Where/what is Error.ArgumentNull()?

这是一个由库的创建者定义的帮助类,以使他们的工作更轻松。

Error.cs文件:

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

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

using System.Diagnostics.Contracts;
void MyMethod(string someParameter)
{
    Contract.Requires<ArgumentNullException>(someParameter != null);
    // ...
}

…如果不满足此条件,它将在运行时抛出异常。

这是一个内部助手类,具有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
        }

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

同样,这只是一种方便/一致性机制,以避免在所有地方重复此代码。

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

这是一个自定义的内部类型,在BCL中不存在。

namespace System.Web.Http
{
    /// <summary>
    /// Utility class for creating and unwrapping <see cref="Exception"/> instances.
    /// </summary>
    internal static class Error
    {}
 }

你可以从那里复制你想要的