如何一次性删除泛型列表中的所有空元素?

中定义的默认方法。Net for C # 删除列表中 null的所有元素?

List<EmailParameterClass> parameterList = new List<EmailParameterClass>{param1, param2, param3...};

假设一些参数是 null; 我不能预先知道,我想从我的列表中删除它们,以便它只包含非空的参数。

162104 次浏览

你可能需要以下内容。

List<EmailParameterClass> parameterList = new List<EmailParameterClass>{param1, param2, param3...};
parameterList.RemoveAll(item => item == null);

RemoveAll 方法应该可以解决这个问题:

parameterList.RemoveAll(delegate (object o) { return o == null; });

我不知道任何内置的方法,但你可以只使用 linq:

parameterList = parameterList.Where(x => x != null).ToList();
List<EmailParameterClass> parameterList = new List<EmailParameterClass>{param1, param2, param3...};


parameterList = parameterList.Where(param => param != null).ToList();

方法 OfType()将跳过空值:

List<EmailParameterClass> parameterList =
new List<EmailParameterClass>{param1, param2, param3...};


IList<EmailParameterClass> parameterList_notnull =
parameterList.OfType<EmailParameterClass>();

简单且没有 LINQ:

while (parameterList.Remove(null)) {};

还有一个简单而优雅的选择:

parameters.OfType<EmailParameterClass>();

这将删除所有不属于 EmailParameterClass类型的元素,这显然会过滤掉任何属于 null类型的元素。

这里有一个测试:

class Program
{
class Test { }


static void Main(string[] args)
{
var list = new List<Test>();
list.Add(null);
Console.WriteLine(list.OfType<Test>().Count());// 0
list.Add(new Test());
Console.WriteLine(list.OfType<Test>().Count());// 1
Test test = null;
list.Add(test);
Console.WriteLine(list.OfType<Test>().Count());// 1


Console.ReadKey();
}
}