2009-07-16 86 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) {} 

所以,如果它是一個方法,用括號..如果它是一個屬性,你不知道。