![](/img/trans.png)
[英]How to use a ref parameter in a thread if "Error CS1628: Cannot use in ref or out parameter inside an anonymous method, lambda or query expression"?
[英]How to use a method with an out parameter in a lambda expression
我有一種方法,它看起來如下:
bool GetIdByName(string name, out ID id)
我想在lambda表達式中使用它,以通過多個“名稱”獲取多個“ id”:
var ids = names.Select(name => idService.GetIdByName(name, out id));
在這種情況下,我會在“ ids”變量中找到所有布爾值,這不是我想要的。 是否還可以將每個調用的out參數'id'插入其中?
您可以使用帶有body的委托:
IEnumerable<ID> ids = names.Select
(
name =>
{
ID id;
GetName(name, out id);
return id;
}
);
我會將對GetIdByName
的調用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
是一個結構 (因此不能為null ):
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.