답변:
아마도 다음을 원할 것입니다.
List<EmailParameterClass> parameterList = new List<EmailParameterClass>{param1, param2, param3...};
parameterList.RemoveAll(item => item == null);
RemoveAll 메서드는 트릭을 수행해야합니다.
parameterList.RemoveAll(delegate (object o) { return o == null; });
이 메서드 OfType()
는 null 값을 건너 뜁니다.
List<EmailParameterClass> parameterList =
new List<EmailParameterClass>{param1, param2, param3...};
IList<EmailParameterClass> parameterList_notnull =
parameterList.OfType<EmailParameterClass>();
OfType
, null
값을 포함하지 않을 것이라고 생각하지 않고 특정 유형의 객체 를 선택 한다고 생각하는 개발자에게는 놀랍습니다 ... 내 코드에.
쉽고 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
?