Linq具有安全转换和空验证

Cus*_*dio 4 c# linq nullreferenceexception

鉴于代码:

from i in this.GridViewFoo.SelectedItems
select new EmployeeEntity
{
    EmployeeID = (i as EmployeeDto).EmployeeID,
    Email = this.GetAllEmail((i as EmployeeDto).Email, (i as EmployeeDto).SecondaryEmails),
    EmployeeNumber = (i as EmployeeDto).EmployeeNumber,
    FirstName = (i as EmployeeDto).FirstName,
    LastName = (i as EmployeeDto).LastName
}
Run Code Online (Sandbox Code Playgroud)

在安全演员之后,(i as EmployeeDto)我可能会收到NullReferenceException.如何确保代码的安全性并且不会因为大量的空检而使其过载?

解决方案概述:

我做了一些测试来断言解决方案是否正常工作.两者都运作良好并带来相同的结果,你可以在这里查看.之后,我使用OfTypeSolutionletSolution进行了一些性能测试.

由于OfType解决方案平均有更好的时间,这将是答案!

nem*_*esv 9

您可以在以下之前使用OfTypeSelect:

from i in this.GridViewFoo.SelectedItems.OfType<EmployeeDto>()
select new EmployeeEntity
{
    EmployeeID = i.EmployeeID,
    Email = this.GetAllEmail(i.Email, i.SecondaryEmails),
    EmployeeNumber = i.EmployeeNumber,
    FirstName = i.FirstName,
    LastName = i.LastName
}
Run Code Online (Sandbox Code Playgroud)

它只为您提供EmployeeDto类型项,SelectedItems因此无需进行强制转换和空检查.