为什么String Array的“Count”Intellisensed属性会变成“Length”?

时间:2015-12-16 22:20:44

标签: c# count resharper intellisense

我已经有了这段代码,看看从SQL Server Stored Proc返回了多少个不同的字段/列(dtPriceComplianceResults是一个填充了SP结果的DataTable):

string[] columnNames = dtPriceComplianceResults.Columns.Cast<DataColumn>()
                .Select(x => x.ColumnName)
                .ToArray();

当我在下面直接添加此代码时:

if (columnNames.

... Intellisense给了我一个“ Count ”选项;当我选择Enter键接受它时,它会将其变形为“长度” - 它不会让我选择“计数”,即使它位于可访问的可用属性列表中。

注意:通过“变形”我的意思是当我点击“输入”附加到“columnNames”的文本时。是“长度”而非“计数”,因此它最终为“columnNames.Length”

它确实以这种方式编译(使用“长度”),而使用“计数”则不会(“运算符'&gt;'不能应用于'方法组'和'int'类型的操作数“)。

我想这是一件好事,但如果“Count”不是真的可以选择,为什么它会出现在列表中呢?

2 个答案:

答案 0 :(得分:4)

It's a ReSharper 10 "typo protection" option

  

纠正长度/计数错误

     

ReSharper可以防止你绊倒数组/集合的错误类型的长度/计数属性。一旦您错误地开始输入Count属性以使用数组,ReSharper将允许您从完成列表中选择它并替换为您可能要键入的Length属性。

您可以在成员信息弹出窗口(IntelliSense下拉列表右侧的工具提示)中看到它将被System.Array.Length替换。

如果您想使用Count()扩展程序,则必须选择带有粉红色箭头扩展方法图标前面的“计数”选项,而不是带有灰色自动完成图标的顶部选项:< / p>

enter image description here

答案 1 :(得分:2)

Count()是一种方法,而不是属性。这就是为什么你得到“不能应用于类型'操作数'方法组'...”错误。

它是IEnumerable的扩展方法,实现将(最终)返回Array.Length

您可以使用它,但效率低于简单(和直接)Length

Intellisense或Resharper正在做正确的事情。