给定代码:
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
}
安全转换后 (i as EmployeeDto)
我可能会收到 NullReferenceException。我如何确保代码的安全性,而不是让他因大量空检查而重载?
解决方案概述:
我做了一些测试来断言这些解决方案是否有效。两者都运行良好并带来相同的结果,您可以查看 HERE .之后我用 OfTypeSolution 做了一些性能测试和 letSolution .
由于 OfType 解决方案的平均时间更好,这就是答案!
最佳答案
您可以使用 OfType在 Select
之前:
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
}
它只会为您提供 SelectedItems
中的 EmployeeDto
类型的项目,因此无需强制转换和空值检查。
关于c# - 具有安全转换和空验证的 Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12497693/