要素のインデックスが必要な場合は、次のようにします。
int index = list.Select((item, i) => new { Item = item, Index = i })
.First(x => x.Item == search).Index;
// or
var tagged = list.Select((item, i) => new { Item = item, Index = i });
int index = (from pair in tagged
where pair.Item == search
select pair.Index).First();
最初のパスではラムダを取り除くことはできません。
これは、アイテムが存在しない場合にスローされることに注意してください。これは、null許容のintに頼ることで問題を解決します。
var tagged = list.Select((item, i) => new { Item = item, Index = (int?)i });
int? index = (from pair in tagged
where pair.Item == search
select pair.Index).FirstOrDefault();
アイテムが必要な場合:
// Throws if not found
var item = list.First(item => item == search);
// or
var item = (from item in list
where item == search
select item).First();
// Null if not found
var item = list.FirstOrDefault(item => item == search);
// or
var item = (from item in list
where item == search
select item).FirstOrDefault();
一致するアイテムの数をカウントする場合:
int count = list.Count(item => item == search);
// or
int count = (from item in list
where item == search
select item).Count();
一致するすべてのアイテムが必要な場合:
var items = list.Where(item => item == search);
// or
var items = from item in list
where item == search
select item;
そしてnull
、これらのケースのいずれかでリストを確認することを忘れないでください。
またはの(list ?? Enumerable.Empty<string>())
代わりに使用しますlist
。
コメントを手伝ってくれたPavelに感謝します。