为什么字符串数组的 "Count" Intellisensed 属性 会变成 "Length"?
Why does a String Array's "Count" Intellisensed property morph into "Length"?
我有这段代码可以查看从 SQL 服务器存储过程返回了多少不同的 fields/columns(dtPriceComplianceResults 是一个数据表,已填充了 SP 的结果) :
string[] columnNames = dtPriceComplianceResults.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToArray();
当我在下面直接添加这段代码时:
if (columnNames.
...Intellisense 给了我一个“Count”选项;但是,当我 select Enter 键接受它时,它会将其变形为 "Length" - 它不会让我选择 "Count" 即使它在可用属性列表中访问.
注意: "morphed" 我的意思是当我点击 "Enter" 时附加到 "columnNames." 的文本是 "Length"不是 "Count",所以它最终是 "columnNames.Length"
它确实以这种方式编译(使用 "Length"),而使用 "Count" 则不会(“Operator '>' cannot be applied to operands of type 'method group' 和 'int'").
我想这是一件好事,但如果 "Count" 不会真的 select 可行,为什么它会出现在列表中?
Count()
是一种方法,而不是 属性。这就是您收到 "cannot be applied to operands of type 'method group' ..." 错误的原因。
它是 IEnumerable
的扩展方法,实现将(最终)return Array.Length
。
您可以使用它,但它的效率低于简单(和直接)Length
。
Intellisense 或 Resharper 正在做正确的事情。
It's a ReSharper 10 "typo protection" option:
Correcting Length/Count mistyping
ReSharper prevents you from stumbling over mistyped Length/Count properties of arrays/collections. As soon as you erroneously start typing the Count property for a usage of an array, ReSharper will allow you to pick it from the completion list and replace with the Length property, which you probably meant to type.
您可以在成员信息弹出窗口(IntelliSense 下拉菜单右侧的工具提示)中看到它将被替换为 System.Array.Length
。
如果您想要 Count()
扩展方法,则必须 select Count 选项前面加上粉红色带箭头的扩展方法图标,而不是顶部的灰色自动完成图标:
我有这段代码可以查看从 SQL 服务器存储过程返回了多少不同的 fields/columns(dtPriceComplianceResults 是一个数据表,已填充了 SP 的结果) :
string[] columnNames = dtPriceComplianceResults.Columns.Cast<DataColumn>()
.Select(x => x.ColumnName)
.ToArray();
当我在下面直接添加这段代码时:
if (columnNames.
...Intellisense 给了我一个“Count”选项;但是,当我 select Enter 键接受它时,它会将其变形为 "Length" - 它不会让我选择 "Count" 即使它在可用属性列表中访问.
注意: "morphed" 我的意思是当我点击 "Enter" 时附加到 "columnNames." 的文本是 "Length"不是 "Count",所以它最终是 "columnNames.Length"
它确实以这种方式编译(使用 "Length"),而使用 "Count" 则不会(“Operator '>' cannot be applied to operands of type 'method group' 和 'int'").
我想这是一件好事,但如果 "Count" 不会真的 select 可行,为什么它会出现在列表中?
Count()
是一种方法,而不是 属性。这就是您收到 "cannot be applied to operands of type 'method group' ..." 错误的原因。
它是 IEnumerable
的扩展方法,实现将(最终)return Array.Length
。
您可以使用它,但它的效率低于简单(和直接)Length
。
Intellisense 或 Resharper 正在做正确的事情。
It's a ReSharper 10 "typo protection" option:
Correcting Length/Count mistyping
ReSharper prevents you from stumbling over mistyped Length/Count properties of arrays/collections. As soon as you erroneously start typing the Count property for a usage of an array, ReSharper will allow you to pick it from the completion list and replace with the Length property, which you probably meant to type.
您可以在成员信息弹出窗口(IntelliSense 下拉菜单右侧的工具提示)中看到它将被替换为 System.Array.Length
。
如果您想要 Count()
扩展方法,则必须 select Count 选项前面加上粉红色带箭头的扩展方法图标,而不是顶部的灰色自动完成图标: