gpt4 book ai didi

c# - String[].Count() 给出奇怪的结果

转载 作者:行者123 更新时间:2023-11-30 18:48:05 25 4
gpt4 key购买 nike

我正在调试一些代码,遇到了这个奇怪的场景。一个方法接受一个 String[] 变量,它首先检查该变量是否为 null...

protected override CommandResult OnExecute(DateTime closeOfBusinessDate, 
string[] verbs)
{
if (verbs == null)
{
throw new ArgumentNullException("verbs");
}

我们通过了这一行,接下来检查它以确保变量不超过一个值...

 if (verbs.Count() > 1)
{
throw new ArgumentException("Only single verb supported.", "verbs");
}

这是非常基本的东西,但在调试期间,我看到了这个结果...... enter image description here

如您所见,Count()1,但对于 if (verbs.Count() > 1),检查的计算结果仍然为真,谁能解释一下?也许我遗漏了一些明显的东西。

编辑:添加输出

在输出窗口中可以看到,值为1

enter image description here

最佳答案

考虑以下代码:

    static void Example()
{
var verbs = new string[] { null, null };
checkBerbs(verbs);
}

static void checkVerbs(string[] verbs)
{
if (verbs.Count() > 1)
{
mutateArray(ref verbs); //this would run another thread --> race condition
throw new ArgumentException();
}
}

private static void mutateArray(ref string[] verbs)
{
verbs = new string[] { null };
}

这是一种可能的情况。不知道你的代码的全部范围我不确定这是否可能。显然 mutateArray 将在另一个线程上运行,您将遇到竞争条件。也许锁定 verbs 可以让您了解这是一些并发问题。

关于c# - String[].Count() 给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25908092/

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