«<» Ошибка оператора

2

Почему выражение (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() Я до сих пор не совсем понимаю, почему они не всегда необходимы.

Джон Скит, спасибо, я думаю, я не понимаю, что именно объявляются тогда? Вы хотели присвоить фактические значения? Они вытягиваются из внешнего источника, но являются строками.

Я понял! Благодарю. (по крайней мере().)

  • 0
    Нет, это все еще не показывает объявление UniqueWords или UniqueURL. Он показывает, где присваиваются значения, но не объявления.
  • 3
    Это очень важно , что вы должны понять , что здесь происходит. Пожалуйста, не просто меняйте код и двигайтесь дальше - иначе в следующий раз вы будете в равной степени сбиты с толку. «Count» - это свойство в IList <T> / List <T> / T [], тогда как «Count ()» - это метод расширения для IEnumerable<T> объявленный в System.Linq.Enumerable .
Теги:
loops
operators
compare

7 ответов

9
Лучший ответ

не забывайте свои парны:

UniqueWords.Count()
  • 0
    ха ха .. лол ... длинный день :) должен сказать очень дружелюбное сообщение об ошибке :)
7

Вы абсолютно уверены, что они оба являются строковыми массивами?

Вы уверены, что это не строковый массив, а другой a IEnumerable<string>? Это, безусловно, объяснит это. (Группа методов, о которой идет речь, будет методом расширения Enumerable.Count().) Если это так, вы не сможете использовать индексщик внутри блока.

Если это не так, удалите любой посторонний код, но включите объявления, чтобы у нас была короткая, но полная программа для тестирования.

Фактически, учитывая ваше редактирование, они не могут быть объявлены как массивы строк - потому что вы присваиваете им значения List<string>. Я подозреваю, что вы обнаружите, что UniqueWords объявлен как List<string> или IList<string>, но UniqueURLs объявлен как IEnumerable<string>. Это может быть неявным, если вы используете var. Наведите указатель мыши на имя переменной, чтобы узнать тип - и если var является скорее бичем, чем благословением, вернитесь к явным вводом ваших переменных.

1

Вам нужны парсеры после имени метода, чтобы он не сравнивал я с самим методом Count.

UniqueWords.Count()
0

решаемый. спасибо, скобки были необходимо для метода .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.. если это свойство, вы этого не делаете.

0

Не зная типы объектов, с которыми вы работаете, трудно сказать точно. У UniqueURLs есть свойство Count или только метод расширения Count()?

0

Я подозреваю, что ваша коллекция UniqueURLs - это IEnumerable, а не ICollection или производная, и у нее нет свойства Count. Вы вызываете метод Enumerable.Count-extension, используйте скобки, и все будет хорошо:

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

Какой тип UniqueURL? Кажется, что .Count не является свойством, а методом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню