簡體   English   中英

如何在Lambda表達式中使用帶有out參數的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM