c# - 在 C# 中,是否应该检查传递给方法的引用是否为 null?

标签 c# arguments nullreferenceexception argumentnullexception

嗯,几个月前我问过a similar question about C and C++ ,但由于整个“Windows Phone”问题,我最近更加关注 C#。

那么,在 C# 中,是否应该在方法边界检查 NULL?我认为这与 C 和 C++ 不同,因为在 C# 中,通常可以确定给定引用是否有效——编译器会阻止将未初始化的引用传递到任何地方,因此唯一可能的错误是它为 null .此外,在 .NET Framework 中为这些东西定义了一个特定的异常,即 ArgumentNullException。 ,这似乎将程序员认为在传递无效 null 时应该得到的东西编成法典。

我个人的意见再次表明,这样做的调用者是错误的,并且说调用者应该向他们抛出 NRE,直到日子结束。但是,与我在 native 代码领域相比,我对此不太确定——在这方面,与 C 或 C++ 相比,C# 在某些地方具有完全不同的编程风格。

那么...您应该检查 C# 方法中的空参数吗?

最佳答案

是的,检查一下。最好使用 Code Contracts 告诉调用者你需要非空参数

void Foo(Bar bar) {
    Contract.Requires(bar != null);
}

这是特别有利的,因为客户可以准确地看到需要什么参数。

如果您不能使用代码契约,请使用保护条款

void Foo(Bar bar) {
    Guard.Against<ArgumentNullException>(bar == null);
}

快速失败。

关于c# - 在 C# 中,是否应该检查传递给方法的引用是否为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5919042/

相关文章:

python - 语法错误 : non-keyword arg after keyword arg in arguments function

c# - 如果方法是运算符,如何找到调用 C# 类方法的代码?

c# - ServiceLocator.Current.GetInstance 可以返回 null 吗?

c# - 如何以编程方式将循环转换为单个表达式?

c# - 指定的转换对泛型无效

python - 具有较少参数和可选参数的函数

c# - 模型中的 MVC5 Razor NullReferenceException

c# - 如何拒绝在 geckofx 中打开新窗口?

c# - Microsoft.Build 和 Microsoft.Web.Administration nuget 包之间的冲突

arrays - 接受任意大小数组作为参数的函数(在 Golang 中可能吗?)