我有一个方法,看起来如下:
bool GetIdByName(string name, out ID id)
我想在lambda表达式中使用它,以获得几个' id'一些名字':
var ids = names.Select(name => idService.GetIdByName(name, out id));
在这种情况下,我会在我的' ID中找到所有bool值。变量,这不是我想要的。是否也可以获得out参数' id'每次打电话给它?
答案 0 :(得分:5)
您可以使用带有正文的委托:
IEnumerable<ID> ids = names.Select
(
name =>
{
ID id;
GetName(name, out id);
return id;
}
);
答案 1 :(得分:2)
我会将对GetIdByName
的调用考虑到一个方法中,以便它变得更具可组合性。
var ids = names.Select(GetId);
private static ID GetId(string name)
{
ID id;
idService.GetIdByName(name, out id);
return id;
}
答案 2 :(得分:2)
正在寻找类似的东西吗?
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
是结构(因此 nullable ):
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);