如何在lambda表达式中使用带有out参数的方法
本文关键字:out 参数 方法 lambda 表达式 | 更新日期: 2023-09-27 18:09:36
我有一个方法,看起来像这样:
bool GetIdByName(string name, out ID id)
我想在lambda表达式中使用它,通过许多"名称"获得几个"id":
var ids = names.Select(name => idService.GetIdByName(name, out id));
在这种情况下,我会在我的'ids'变量中找到所有bool值,这不是我想要的。是否也有可能得到每个调用的输出参数"id"?
您可以使用带有body的委托:
IEnumerable<ID> ids = names.Select
(
name =>
{
ID id;
GetName(name, out id);
return id;
}
);
我将把对GetIdByName
的调用分解成一个方法,这样它就变得更可组合了。
var ids = names.Select(GetId);
private static ID GetId(string name)
{
ID id;
idService.GetIdByName(name, out id);
return id;
}
正在寻找这样的东西吗?
var ids = names
.Select(name => {
ID id = null;
if (!idService.GetIdByName(name, out id))
id = null; // name doesn't corresponds to any ID
return id;
})
.Where(id => id != null);
如果ID
是结构体(因此不能为空):
var ids = names
.Select(name => {
ID id = null;
Boolean found = idService.GetIdByName(name, out id);
return new {
Found = found,
ID = id
};
})
.Where(data => data.Found)
.Select(data => data.id);