2009-07-16 100 views
2

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

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()我还不完全理解为什么它们并不总是必需的。

乔恩Skeet,谢谢,我想我不明白什么声明是什么呢?你想要分配的实际值?他们从外部来源拉,但是是字符串。

我明白了!谢谢。 (至少是()。)

+0

不,这仍然不显示UniqueWords或UniqueURL的*声明*。它显示了值的分配位置,而不是声明。 – 2009-07-16 20:42:39

+3

你*应该*了解这里发生了什么真的很重要。请不要只是改变代码,继续前进 - 否则下一次你会感到困惑。 “Count”是IList /List /T []上的一个属性,而“Count()”是在System.Linq.Enumerable中声明的IEnumerable 的扩展方法。 – 2009-07-16 20:45:52

回答

9

不要忘记你的括号:

UniqueWords.Count() 
7

你绝对是肯定他们都是字符串数组?

你确定一个不是字符串数组,另一个是IEnumerable<string>?这当然可以解释它。 (所讨论的方法组将是Enumerable.Count()扩展方法。)如果是这种情况,则无法使用块中的索引器。

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

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

0

UniqueURLs的类型是什么?看来.Count不是一种财产,而是一种方法。

0

不知道的类型,您正在使用的对象,这是很难肯定地说。 UniqueURLs是否具有Count属性,或者只有Count()扩展方法?

0

我怀疑你的UniqueURLs集合是IEnumerable而不是ICollection或派生的,它没有Count属性。你调用Enumerable.Count扩展方法,使用括号,你会被罚款:

if (i<UniqueURLs.Count()) {rURLs[i] = UniqueURLs[i];} 
1

您需要的方法名称后括号中以便它不是在比较我的方法计数本身。

UniqueWords.Count() 
0

已解决。谢谢,括号分别是 所需的方法.Count()我还是做 不完全明白为什么它们不是 总是必要的。

乔恩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) {} 

所以,如果它是一个方法,用括号..如果它是一个属性,你不知道。