Answers:
您可能需要以下内容。
List<EmailParameterClass> parameterList = new List<EmailParameterClass>{param1, param2, param3...};
parameterList.RemoveAll(item => item == null);
RemoveAll方法应该可以解决问题:
parameterList.RemoveAll(delegate (object o) { return o == null; });
该方法OfType()
将跳过空值:
List<EmailParameterClass> parameterList =
new List<EmailParameterClass>{param1, param2, param3...};
IList<EmailParameterClass> parameterList_notnull =
parameterList.OfType<EmailParameterClass>();
简单且无需LINQ:
while (parameterList.Remove(null)) {};
List
类中,紧邻RemoveAll
,因此为了清晰起见,我建议您使用该方法。如果性能恰好是至关重要的,那么您可以采用这种方法(尽管我会删除括号,并可能在不知情的情况下为开发人员添加注释)。
RemoveAll
收到了Predicate
,因此您应该使用RemoveAll(x => x == null)
,如已接受的内容和Mark Bell的回答所示。
还有另一个简单而优雅的选择:
parameters.OfType<EmailParameterClass>();
这将删除所有非类型的元素,EmailParameterClass
这显然会过滤掉所有类型的元素null
。
这是一个测试:
class Test { }
class Program
{
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();
}
}
EmailParameterClass
而仅具有等于的值null
?