首页
学习
活动
专区
圈层
工具
发布

NullReferenceException,就不应该存在!

那么 DoSomething 被调用的时候,直接就会抛出 NullReferenceException。这个方法比较简单,我们猜 _value 为 null 基本不会有问题了,方法复杂一点儿就难猜了。...NullReferenceException 的替代方案 既然 NullReferenceException 没能给我们提供足够的信息,那么我们就自己来提供这些信息。...所以,为了解决这些困惑,我建议在开发中以如下方式对待我们的 null: 对任何可被外部模块调用的方法的参数进行 null 判断,并在参数为 null 时抛出 ArgumentNullException。...如果你无法根据现有状态完成方法承诺的任务,请抛出具体的异常并给出真实的原因。 如果确实要用 null 在程序中代表某种状态,请确定这能够代表某种唯一确定的状态,并强制要求使用方判空。...对于第 3 点,JetBrains 为我们提供了 JetBrains.Annotations,这是一组 100+ 个的 Attribute,以 NuGet 包的形式提供。

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# 可为空引用类型

    导致可为空引用类型不尽理想的一些原因在于: 对空值调用成员会导致 System.NullReferenceException 异常抛出,导致生产代码抛出 System.NullReferenceException...减少 NullReferenceException 抛出:降低 NullReferenceException 异常抛出的可能性,具体是通过改进静态流分析,标记出可能存在问题的情况,即调用值成员之一前未显式检查值是否为空...text = null; 减少 NullReferenceException 抛出 支持将类型声明为可为空或不可为空后,至于确定声明是否可能违反规定,现在就取决于编译器静态流分析的选择。...抛出。...这很遗憾,但支持可为空引用类型应该会降低 NullReferenceException 抛出可能性,尽管不是完全杜绝。(这类同于分配变量时的编译器检查易错性。)

    84220

    dotnet 6 已知问题 ManualResetEventSlim 的 Set 方法抛出空异常

    当前这个问题在 .NET 7 修复 这是从我的埋点上报遥测收集到的异常信息,在线程池里面的调用堆栈,调用到 ManualResetEventSlim 的 Set 方法,抛出了 System.NullReferenceException...异常,堆栈如下 System.NullReferenceException: Object reference not set to an instance of an object....而且通过异常的调用堆栈可以看到里面没有我编写的业务代码,大概可以证明是底层 dotnet 框架的问题 通过以上堆栈的 ThreadPoolWorkQueue.Dispatch 大概可以了解到属于线程池模块,在这里如果抛出了异常...应用程序进程是接不住的,将会闪退 换句话说就是遇到这个异常,约等于进程将会被炸掉 由于异常发生的次数太少,我也没有调查出来具体原因,而且进一步阅读 dotnet 仓库的源代码,我也没有找到任何可能在 Set 方法里面抛出的空异常

    29920

    一文看懂 .NET 的异常处理机制、原则以及最佳实践

    什么时候该抛出异常,抛出什么异常?什么时候该捕获异常,捕获之后怎么处理异常?你可能已经使用异常一段时间了,但对 .NET/C# 的异常机制依然有一些疑惑。那么,可以阅读本文。...请勿有意从自己的源代码中引发 System.Exception、System.SystemException、System.NullReferenceException 或 System.IndexOutOfRangeException...本身并没有明确的意义 ApplicationException 这是各种异常的基类,本身并没有明确的意义 由 CLR 引发的异常 NullReferenceException 试图在空引用上执行某些方法...NullReferenceException 试图在空引用上执行某些方法,除了告诉实现者出现了意料之外的 null 之外,没有什么其它价值了 IndexOutOfRangeException 使用索引的时候超出了边界...在原因上会类似于托管中的 NullReferenceException。

    1.2K41

    C# 一分钟浅谈:异常处理的最佳实践

    当程序遇到无法正常处理的情况时,会抛出一个异常。如果未被正确捕获和处理,程序将终止执行。基本的异常处理结构包括try、catch和finally块:try:包含可能引发异常的代码。...catch:用于捕获try块中抛出的异常,并处理这些异常。finally:无论是否发生异常,finally块中的代码都会被执行,通常用于释放资源。...示例代码try{ // 可能抛出异常的代码 int result = 10 / 0;}catch (DivideByZeroException ex){ Console.WriteLine...try{ // 错误的逻辑 int[] array = null; array[0] = 1; // NullReferenceException}catch{ // 忽略所有异常...try{ // 可能抛出多种类型的异常 throw new Exception("未知错误");}catch (Exception ex){ Console.WriteLine("捕获到异常

    40410
    领券