gpt4 book ai didi

c# - 尝试在 LINQ 循环中捕获

转载 作者:行者123 更新时间:2023-11-30 20:51:17 24 4
gpt4 key购买 nike

我有以下代码:

var newList = from user in allUsers.ToList()
select new
{
user.FirstName,
user.LastName,
user.Email,
Phone = SomeFunction(user.Data).Phone,
};

有时 SomeFunction() 返回一个 null 对象,然后当我尝试在其上使用 .Phone 时,它​​会抛出一个 NullReferenceException .

有没有办法只捕获循环中的那个项目并跳过它并继续下一个元素而不是跳过整个循环?

最佳答案

您可以将 null(或默认号码)指定为电话,let查询中的子句有助于防止多重评估:

var newList = from user in allUsers.ToList()
let data = SomeFunction(user.Data)
select new
{
user.FirstName,
user.LastName,
user.Email,
Phone = data == null ? null : data.Phone,
};

另一种选择是将从用户那里检索电话的逻辑封装在一个方法中。如有必要,您甚至可以使用真正的 try/catch:

private string GetPhone(User user)
{
if (user == null)
return null;
return user.Phone;
}

//...

var newList = from user in allUsers.ToList()
select new
{
user.FirstName,
user.LastName,
user.Email,
Phone = GetPhone(user)
};

最后,通过方法语法,您还可以使用语句 lambda,您可以在其中使用任何您想要的代码(以可读性为代价):

var newList = allUsers.ToList()
.Select(user =>
{
var data = SomeFunction(user.Data);
return new
{
user.FirstName,
user.LastName,
user.Email,
Phone = data == null ? null : data.Phone
};
});

关于c# - 尝试在 LINQ 循环中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21850102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com