gpt4 book ai didi

.net - 当我检查空值时禁用空引用警告

转载 作者:行者123 更新时间:2023-12-01 09:57:46 24 4
gpt4 key购买 nike

在下面的代码中,如果 cmd已初始化,然后我将确保在抛出异常之前关闭所有打开的连接。但是,即使我检查了 cmd不为空,我仍然在随后的代码行中收到一个可能的空引用警告。

Dim cmd As SqlCommand
Try
'Do some Stuff
Catch ex As Exception
If cmd IsNot Nothing AndAlso
cmd.Connection IsNot Nothing AndAlso '<- null cmd warning
cmd.Connection.State = ConnectionState.Open Then '<- null cmd warning
cmd.Connection.Close() '<- null cmd warning
End If
Throw
End Try
我收到以下两个警告(可能一个来自 Resharper,一个来自 Visual Studio):
  • Variable 'x' might not be initialized before accessing. A null reference exception could occur at runtime.
  • BC42104: Variable 'x' is used before it has been assigned a value. A null reference exception could result at runtime.

根据 Visual Studio Page :

An application has at least one possible path through its code that reads a variable before any value is assigned to it.


但我认为在代码中甚至没有一种可能的路径可以在不初始化的情况下使用变量。
  • 我犯了一些错误还是这是一个错误?
  • 有没有办法禁止出现此警告?

  • 这是一个屏幕截图:
    screenshot
    这与这里已经提出的许多类似问题不同,例如 Prevent Resharper “Possible Null Reference Exception” warnings因为我不想允许 NullableType,而是已经保证我的变量不为空。

    更新:
    后续问题:为什么?
    我的对象是否从未初始化或初始化为 Nothing , 在这两种情况下 cmd IsNot Nothing应该解析为 False ,所以在 AndAlso 之后的任何东西永远不应该被执行。
    Dim cmd1 As SqlCommand
    Console.Write(cmd1 IsNot Nothing) 'False

    Dim cmd2 As SqlCommand = Nothing
    Console.Write(cmd2 IsNot Nothing) 'False
    也许编译器在编译时没有一个很好的方法来保证这一点。

    最佳答案

    你的问题不是你的值是空的,问题是你的对象根本没有初始化。例如:

        static void Main(string[] args)
    {
    List<int> empty;

    if (empty != null)
    {
    Console.WriteLine("no");
    }
    }

    不会编译 , 因为 empty没有值(value)。如果我将代码更改为:
        static void Main(string[] args)
    {
    List<int> empty = null;

    if (empty != null)
    {
    Console.WriteLine("no");
    }
    }

    它会起作用,因为我的列表现在有一个值,它是空的,但它仍然存在。

    编辑:抱歉,我使用 C# 而不是 VB,那是因为我手边有那个编辑器,但代码是正确的。
    你每次都初始化你的变量,你不会得到错误。

    关于.net - 当我检查空值时禁用空引用警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22045944/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com