Ошибка CS1955: элемент 'System.Collections.Generi c .List .Count 'нельзя использовать как метод или делегат - PullRequest
1 голос
/ 17 января 2020

Я использую repl.it для программирования, пока я в школе. Я использую тот же код, что и дома, но получаю ошибку. Я не уверен, сделал ли я крошечную ошибку, которую не заметил или что, но мне нужна помощь. вот мой код:

  public static void Main (string[] args) 
  {
    Console.ForegroundColor = ConsoleColor.White;

    if (debugMode == true)
    {
      Console.WriteLine("DEBUG ON");
    }
    else if (debugMode == false)
    {
      Console.WriteLine("DEBUG OFF");
    }

    List<Action> actions = new List<Action>();

    actions.Add(() => NormalDay());

    Random random = new Random();

    int selectedAction = random.Next(0, actions.Count());

    actions[selectedAction].Invoke();
  }

1 Ответ

3 голосов
/ 17 января 2020

Давайте рассмотрим подробнее go.

List<T> имеет свойство с именем Count. Поскольку это свойство, вы получаете к нему доступ без использования скобок:

int count = mylist.Count;

Существует также метод расширения в классе System.Linq.Enumerable, который определяет Count() метод для всего, что может быть перечислено (т.е. что-либо, что реализует IEnumerable<T>): это включает List<T>. Он вызывается так, как если бы это был метод List<T>.

Однако компилятор найдет этот метод расширения, только если у вас есть using System.Linq; в верхней части файла.

Например:

using System.Linq;

...
int count = mylist.Count();

(В указанном c случае List<T> метод расширения Count() просто получит доступ к свойству Count, поэтому при использовании любого из них будет работать. Однако более нормально использовать свойство Count).

Таким образом, разница в том, что в школе у ​​вас было using System.Linq; вверху файла, а у вас нет дома.

...