【问题标题】:Operator cannot be applied to operands of type 'Method Group' and 'int'运算符不能应用于“方法组”和“int”类型的操作数
【发布时间】:2013-10-31 20:16:28
【问题描述】:

我正在尝试获取此字符串数组中的元素数,但它不会让我从Count 中取出 1。

string [] Quantitys = Program.RecieptList[i].ItemQuantitys.Split(new char[] {'*'});
for (int ii = 0; i <= Quantitys.Count - 1; ii++)
{

}

我收到一条错误消息说明

运算符“-”不能应用于“方法组”和“整数”类型的操作数。

这样做的正确方法是什么?

【问题讨论】:

标签: c# arrays for-loop


【解决方案1】:

数组应该是Length 而不是Count

string [] Quantitys = Program.RecieptList[i].ItemQuantitys.Split(new char[] {'*'});
for (int ii = 0; i <= Quantitys.Length - 1; ii++)
{

}

MSDN 上的更多信息:Array.Length

此外,除非是故意的,否则您的 ii 应该只是在您的 for 循环中的 i

for (int i = 0; i <= Quantitys.Length - 1; i++)

尽管正如下面的 cmets 所指出的,您也可以使用 Quantitys.Count(),因为数组继承自 IEnumerable&lt;T&gt;。不过就个人而言,对于一维数组,我更喜欢使用标准的Array.Length 属性。

【讨论】:

  • @Nathan:如果您习惯使用列表,则可以使用 IEnumerable 方法来处理数组。事实上,你得到的错误是因为你忘记了 Linq Count() 方法的括号。
  • @AustinSalonen,因为 IList&lt;&gt; 实现了 IEnumerable&lt;&gt;,从技术上讲,您也可以对列表做同样的事情。
  • 但是Array 实现了ICollection,它定义了Count(属性)。您可以将它与显式的ICollection 强制转换一起使用(它仍将返回Lenght)。但为什么我需要投射?
  • 是不是因为显式的ICollection.Count接口实现?github.com/microsoft/referencesource/blob/…
  • 是的,System.Array 有效地隐藏了ICollection.Count,因此除非您将其转换为IList(我不建议这样做)或ICollection,否则您不会直接点击它。从技术上讲,您可以这样使用它,但我通常避免在偶尔的扩展方法之外直接使用ICollection。需要迭代/枚举?使用IEnumerable。键值对? IDictionary。等等等等。
【解决方案2】:

数组有一个Length 属性,而不是Count 属性,尽管它们做同样的事情。您看到的错误是因为它找到了一个扩展方法Count(),但由于您没有使用() 调用它,所以不能完全使用它。您可以将您的数组用作IList&lt;T&gt;,这样您就可以保留熟悉的Count 属性名称。

此外,iii 会让大多数人感到困惑(包括您自己,从外观上看:您将两者都包含在您的 for 行中)。从数学继承而来的编程标准是ijk、...用于索引变量名称。这将起作用:

IList<string> Quantitys = Program.RecieptList[i].ItemQuantitys.Split(new char[] {'*'});
for (int j = 0; j <= Quantitys.Count - 1; j++)
{

}

【讨论】:

    【解决方案3】:

    只需添加括号 ()。 Count() 现在也适用于我

    【讨论】:

    • 这在第一个答案的cmets中已经提到了。
    • @JSTL "评论用于要求澄清或指出帖子中的问题。"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2011-12-31
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多