Почему выражение (i < UniqueWords.Count) допустимо в цикле for, но возвращает "CS0019 Operator" < не может применяться к операндам типа "int" и "группа методов" при размещении в my 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];}
}
EDITED добавляет объявления:
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() Я до сих пор не совсем понимаю, почему они не всегда необходимы.
Джон Скит, спасибо, я думаю, я не понимаю, что именно объявляются тогда? Вы хотели присвоить фактические значения? Они вытягиваются из внешнего источника, но являются строками.
Я понял! Благодарю. (по крайней мере().)
не забывайте свои парны:
UniqueWords.Count()
Вы абсолютно уверены, что они оба являются строковыми массивами?
Вы уверены, что это не строковый массив, а другой a IEnumerable<string>
? Это, безусловно, объяснит это. (Группа методов, о которой идет речь, будет методом расширения Enumerable.Count()
.) Если это так, вы не сможете использовать индексщик внутри блока.
Если это не так, удалите любой посторонний код, но включите объявления, чтобы у нас была короткая, но полная программа для тестирования.
Фактически, учитывая ваше редактирование, они не могут быть объявлены как массивы строк - потому что вы присваиваете им значения List<string>
. Я подозреваю, что вы обнаружите, что UniqueWords
объявлен как List<string>
или IList<string>
, но UniqueURLs
объявлен как IEnumerable<string>
. Это может быть неявным, если вы используете var
. Наведите указатель мыши на имя переменной, чтобы узнать тип - и если var
является скорее бичем, чем благословением, вернитесь к явным вводом ваших переменных.
Вам нужны парсеры после имени метода, чтобы он не сравнивал я с самим методом Count.
UniqueWords.Count()
решаемый. спасибо, скобки были необходимо для метода .Count() Я все еще делаю не полностью понять, почему они не всегда необходимо.
Джон Скит, спасибо, я думаю, я не понять, что именно объявления будут либо тогда? Вы хотели присвоить фактические значения? Они вытягиваются из внешнего source, но являются строками.
Я понял! Благодарю. (по крайней мере,().)
здесь разница:
Объявлено как метод...
public class UniqueWords {
public int Count() {
// Code to get the count
}
}
используется с parens:
if (i < UniqueWords.Count()) {}
Если объявлено как свойство...
public class UniqueWords {
public int Count {
get {
// code to get the count
}
}
}
используется без парнеров:
if (i < UniqueWords.Count) {}
Итак, если это метод, используйте parens.. если это свойство, вы этого не делаете.
Не зная типы объектов, с которыми вы работаете, трудно сказать точно. У UniqueURLs есть свойство Count или только метод расширения Count()?
Я подозреваю, что ваша коллекция UniqueURLs - это IEnumerable, а не ICollection или производная, и у нее нет свойства Count. Вы вызываете метод Enumerable.Count-extension, используйте скобки, и все будет хорошо:
if (i<UniqueURLs.Count()) {rURLs[i] = UniqueURLs[i];}
Какой тип UniqueURL? Кажется, что .Count не является свойством, а методом.
IEnumerable<T>
объявленный вSystem.Linq.Enumerable
.