1. ホーム
  2. c#

[解決済み】LINQでリスト内の項目を検索する

2022-04-19 12:28:58

質問

ここでは、文字列の一覧から項目を探す簡単な例を紹介します。通常、私は for ループや匿名デリゲートでこのような処理を行います。

int GetItemIndex(string search)
{
   int found = -1;
   if ( _list != null )
   {
     foreach (string item in _list) // _list is an instance of List<string>
     {
        found++;
        if ( string.Equals(search, item) )
        {
           break;
        }
      }
      /* Use an anonymous delegate
      string foundItem = _list.Find( delegate(string item) {
         found++;
         return string.Equals(search, item);
      });
      */
   }
   return found;
}

LINQは初めてです。LINQを使ってリストの中の項目を見つけることはできますか?可能であれば、どのように?

どのように解決するのですか?

いくつかの方法があります(ただし、これは ではない があります。)

  1. シングル は結果をひとつだけ返しますが、 ひとつも見つからなかったり複数見つかったりした場合は例外をスローします (これはあなたが望むことであってもそうでなくてもかまいません)。

     string search = "lookforme";
     List<string> myList = new List<string>();
     string result = myList.Single(s => s == search);
    
    

注意点 SingleOrDefault() は同じ動作をしますが、例外を発生させる代わりに、参照型の場合はnullを、値型の場合はデフォルト値を返します。

  1. どこ は条件に一致するすべての項目を返すので、1つの要素でIEnumerable<string>を取得することができます。

     IEnumerable<string> results = myList.Where(s => s == search);
    
    
  2. 最初 は、条件に一致する最初の項目を返します。

     string result = myList.First(s => s == search);
    
    

注意点 FirstOrDefault() は同じ動作をしますが、例外を発生させる代わりに、参照型の場合はnullを、値型の場合はデフォルト値を返します。