我想将A更改为B. A是
int[] list = { 1, 2, 3, 4, 5 };
List<int> evenList = new List<int>();
foreach ( var item in list )
{
if (item % 2 == 0)
{
evenList.Add(item);
}
}
foreach ( var item in evenList )
{
Console.Write(item + ",");
}
和B是
List<int> evenList = list.FindAll((elem) => elem % 2 == 0);
evenList.ForEach(elem) => { Console.Write(elem + ","); } );
但是在B,我遇到了这样的错误:
CS7036 C# There is no argument given that corresponds to the required
formal parameter 'match' of 'Array.FindAll<T>(T[], Predicate<T>)'
PS。我添加了
using System;
using System.Collections.Generic;
有什么我忘记了吗?
答案 0 :(得分:4)
int[] list = { 1, 2, 3, 4, 5 };
List<int> evenList = Array.FindAll(list, elem => elem % 2 == 0).ToList();
evenList.ForEach(elem => { Console.Write(elem + ","); } );
Array.FindAll
不是扩展方法,所以你根本无法调用list.FindAll()Array
没有ForEach,因此您需要转换evenList ToList()
答案 1 :(得分:2)
那是因为Array.FindAll
是静态的,所以你应该像这样调用它:
var NewList = Array.FindAll(list, (elem) => elem %2 == 0);
来自MSDN:
Syntax:
public static T[] FindAll<T>(
T[] array,
Predicate<T> match
)
link:https://msdn.microsoft.com/en-us/library/1kkxfxdd(v=vs.110).aspx
干杯
编辑:
编程不是一种猜测游戏,你试图在不尊重正确语法的情况下编写代码。
这是你应该做的:
int[] list = { 1, 2, 3, 4, 5 };
List<int> evenList = Array.FindAll(list, elem => elem % 2 == 0).ToList();
Console.Write(string.Join(",", evenList) );
答案 2 :(得分:0)
你没有使用Linq的原因?它更新,适用于任何类型的集合,而不仅仅是int[]
。
using System.Linq;
Console.Write(list
.Where(i => i % 2 == 0)
.Select(i => i.ToString())
.DefaultIfEmpty()
.Aggregate((a, b) => a + "," + b));
Performancewise,这将以与for循环相同的复杂性执行,但总体上可能稍微慢一点(尽管我实际上认为它不会慢得多)。 Linq懒洋洋地评估这里有帮助。