【发布时间】:2014-09-18 08:46:15
【问题描述】:
我正在调试一些代码,遇到了这个奇怪的场景。一个方法接受一个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");
}
这是非常基本的东西,但在调试过程中,我看到了这个结果......
如您所见,Count() 为 1,但检查结果仍为 if (verbs.Count() > 1) 的 true,谁能解释一下?也许我遗漏了一些明显的东西。
编辑:添加输出
在输出窗口可以看到,值为1。
【问题讨论】:
-
尝试在 if 语句之前打印 verbs.Count()
-
能否请您发布动词数组?谢谢!
-
我无法评论奇怪的行为,但我必须问该方法是否只需要一个动词,为什么它需要一个数组?
-
如果代码正是您显示的内容,这很奇怪,特别是因为 AFAIK 数组不会在不更改引用的情况下更改其大小(在并发访问的情况下)。顺便说一句,为什么
.Count()而不是.Length? -
.Count()调用是否真的绑定到了Enumerable.Count<T>(this IEnumerable<T>)扩展方法?
标签: c# visual-studio debugging visual-studio-2013