System.Collections.Generic.List 需要'1'类型参数

问题描述 投票:11回答:4

我有以下代码的错误:

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());

此外,Count()似乎不再被允许。它被弃用了吗?

c# list
4个回答
12
投票

您正在尝试创建一个List<string>,您应该告诉编译器

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

没有List,有一个名为List<T>的泛型类,需要一个类型参数。如果不指定类型参数,则无法创建通用列表。

你也试图调用Count扩展方法。该方法将IEnumerable<T>作为第一个参数,而不是IEnumerable,这里是定义:

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

所以你应该使用IEnumerable<string>访问该扩展方法:

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

2
投票

您正在使用System.Collections.Generic.List<T>,因此它是通用列表,因此您必须提供通用参数T。在您的示例中,您需要一个List<string>。所以尝试:

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

0
投票

实际上,你的样本中根本不需要List,你可以简化一切:

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

-3
投票

试试这个:

static void Main(string[] args)
{
    string[] colors = { "green", "brown", "blue", "red" };
    var list = new List<string>(colors); // <string>
    IEnumerable query = list.Where(c => c.Length == 3); // "Length", not "length"
    list.Remove("red");
    Console.WriteLine(query.Count());
}
© www.soinside.com 2019 - 2024. All rights reserved.