web-dev-qa-db-fra.com

System.Collections.Generic.List <T> nécessite des arguments de type '1'

J'ai cette erreur avec le code suivant:

string[] colors = { "green", "brown", "blue", "red" };
var list = new List(colors);
IEnumerable query = list.Where(c => c.length == 3);
list.Remove("red");
Console.WriteLine(query.Count());

De plus, Count() ne semble plus être autorisé. Est-ce obsolète?

9
user1173169

Vous essayez de créer un List<string> et vous devriez le dire au compilateur

var list = new List<string>(colors);

Il n'y a pas List, il existe une classe generic nommée List<T> , qui requiert un paramètre de type. Vous ne pouvez pas créer de liste générique sans spécifier le paramètre de type.

Aussi, vous essayez d'appeler la méthode d'extension Count.Cette méthode prend IEnumerable<T> comme premier paramètre, pas IEnumerable, voici la définition:

public static int Count<TSource>(this IEnumerable<TSource> source)

vous devez donc utiliser IEnumerable<string> pour accéder à cette méthode d'extension:

IEnumerable<string> query = list.Where(c => c.Length == 3);
list.Remove("red");
Console.WriteLine(query.Count());
12
Selman Genç

Vous utilisez System.Collections.Generic.List<T>, il s’agit donc d’une liste generic et vous devez donc fournir le paramètre genericT. Dans votre exemple, vous voulez un List<string>. Alors essayez:

List<string> list = new List<string>(colors);
2
odyss-jii

En fait, vous n'avez pas besoin d'une List dans votre échantillon et vous pouvez tout simplifier:

var count = new [] { "green", "brown", "blue", "red" }
    .Where(c => c.length == 3)
    .Where(c => c != "red")
    .Count();
Console.WriteLine(count);
0
Kaspars Ozols