在.Net的C#中,是否有一种默认方法可以删除列表中所有为null
的元素?
List<EmailParameterClass> parameterList = new List<EmailParameterClass>{param1, param2, param3...};
假设一些参数是null
;我事先无法知道,我想从列表中删除它们,以便列表只包含不为null的参数。
你可能需要以下内容。
List<EmailParameterClass> parameterList = new List<EmailParameterClass>{param1, param2, param3...};
parameterList.RemoveAll(item => item == null);
我不知道是否有内置的方法,但是您可以使用 LINQ:
parameterList = parameterList.Where(x => x != null).ToList();
parameterList
已经是一个列表,应避免这样做,因为它会不必要地创建一个新副本。在这种情况下,请使用其他人建议的RemoveAll
方法。 - NickArray
,那么这可能是最好的选择。 - AndrewparameterList.RemoveAll(delegate (object o) { return o == null; });
OfType()
方法将跳过空值:
List<EmailParameterClass> parameterList =
new List<EmailParameterClass>{param1, param2, param3...};
IList<EmailParameterClass> parameterList_notnull =
parameterList.OfType<EmailParameterClass>();
OfType
选择特定类型对象而没有考虑到它不包括null
值的开发者来说,这会带来一些意外...所以我有点犹豫是否要将其引入到我的代码中。 - user3638471还有一种简单而优雅的选择:
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();
}
}
EmailParameterClass
类型,且仅具有等于 null
的值吗? - derHugoBitmap?[]
变成了 Bitmap[]
)。 - Mark A. DonohoeList<EmailParameterClass> parameterList = new List<EmailParameterClass>{param1, param2, param3...};
parameterList = parameterList.Where(param => param != null).ToList();
简单易用,无需使用 LINQ:
while (parameterList.Remove(null)) {};
List
类中紧挨着RemoveAll
,所以我建议使用它来提高清晰度。如果性能非常关键,那么你可以采用这种方法(虽然我会删除括号并为不知情的开发人员添加注释)。 - Andrew
item => item is null
。 - phoenix