3

为什么( i < UniqueWords.Count )表达式在 for 循环中有效,但在我的 if 中返回“CS0019 运算符'<'不能应用于'int'和'方法组'类型的操作数”错误?它们都是先前声明的字符串数组。

for (int i = 0;i<UniqueWords.Count;i++){
        Occurrences[i] = Words.Where(x => x.Equals(UniqueWords[i])).Count();
        Keywords[i] = UniqueWords[i];
        if (i<UniqueURLs.Count) {rURLs[i] = UniqueURLs[i];}
}

编辑添加声明:

    List<string> Words = new List<string>();
    List<string> URLs = new List<string>();

//像这样添加的元素。. . .

            Words.Add (referringWords); //these are strings
            URLs.Add (referringURL);

        UniqueWords = Words.Distinct().ToList();
        UniqueURLs = URLs.Distinct().ToList();

解决了。谢谢,方法.Count()需要括号我仍然不完全理解为什么它们并不总是必要的。

Jon Skeet,谢谢,我想我也不明白声明到底是什么?您想要分配的实际值?它们是从外部源中提取的,但是是字符串。

我得到它!谢谢。(至少是()。)

4

7 回答 7

10

不要忘记你的父母:

UniqueWords.Count()
于 2009-07-16T20:40:53.683 回答
7

确定它们都是字符串数组吗?

你确定一个不是字符串数组,另一个不是IEnumerable<string>?那肯定会解释的。(有问题的方法组将是Enumerable.Count()扩展方法。)如果是这种情况,您也将无法在块中使用索引器。

如果不是这样,请删除任何无关的代码,但包括声明,以便我们有一个简短但完整的程序来测试。

事实上,鉴于您的编辑,它们不能被声明为字符串数组 - 因为您正在List<string>为它们分配值。我怀疑你会发现它UniqueWords被声明为List<string>or IList<string>,但UniqueURLs被声明为IEnumerable<string>. 如果您正在使用,这可能是隐含的var。将鼠标悬停在变量名称上以找出类型 - 如果var这更像是一种诅咒而不是一种祝福,请返回显式键入变量。

于 2009-07-16T20:39:52.327 回答
1

您需要方法名称后的括号,以便它不会将 i 与方法 Count 本身进行比较。

UniqueWords.Count()
于 2009-07-16T20:42:46.940 回答
0

UniqueURL 的类型是什么?似乎 .Count 不是属性,而是方法。

于 2009-07-16T20:40:39.033 回答
0

在不知道您正在使用的对象的类型的情况下,很难确定。UniqueURLs 有 Count 属性,还是只有 Count() 扩展方法?

于 2009-07-16T20:40:54.073 回答
0

我怀疑您的 UniqueURLs-collection 是 IEnumerable 而不是 ICollection 或派生类,并且它没有 Count 属性。你正在调用 Enumerable.Count-extension 方法,使用括号,你会没事的:

if (i<UniqueURLs.Count()) {rURLs[i] = UniqueURLs[i];}
于 2009-07-16T20:41:12.543 回答
0

解决了。谢谢,方法.Count()需要括号我仍然不完全理解为什么它们并不总是必要的。

Jon Skeet,谢谢,我想我也不明白声明到底是什么?您想要分配的实际值?它们是从外部源中提取的,但是是字符串。

我得到它!谢谢。(至少是()。)

这就是区别:

声明为方法...

public class UniqueWords {
  public int Count() {
    // Code to get the count
  }
}

与括号一起使用:

if (i < UniqueWords.Count()) {}

如果声明为属性...

public class UniqueWords {
  public int Count {
    get {
        // code to get the count
    }
  }
}

不带括号使用:

if (i < UniqueWords.Count) {}

因此,如果它是一种方法,请使用括号。如果它是一个属性,则不要。

于 2009-07-17T01:48:34.843 回答