我已经有了这段代码,看看从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”不是真的可以选择,为什么它会出现在列表中呢?
答案 0 :(得分:4)
It's a ReSharper 10 "typo protection" option:
纠正长度/计数错误
ReSharper可以防止你绊倒数组/集合的错误类型的长度/计数属性。一旦您错误地开始输入Count属性以使用数组,ReSharper将允许您从完成列表中选择它并替换为您可能要键入的Length属性。
您可以在成员信息弹出窗口(IntelliSense下拉列表右侧的工具提示)中看到它将被System.Array.Length
替换。
如果您想使用Count()
扩展程序,则必须选择带有粉红色箭头扩展方法图标前面的“计数”选项,而不是带有灰色自动完成图标的顶部选项:< / p>
答案 1 :(得分:2)
Count()
是一种方法,而不是属性。这就是为什么你得到“不能应用于类型'操作数'方法组'...”错误。
它是IEnumerable
的扩展方法,实现将(最终)返回Array.Length
。
您可以使用它,但效率低于简单(和直接)Length
。
Intellisense或Resharper正在做正确的事情。