23

プロパティが「 ComTruise 」に設定されたがMyList List<Person>ある場合があります。要素全体ではなく、「ComTruise」が最初に出現したインデックスが必要です。PersonNameMyListPerson

私が今していることは次のとおりです。

string myName = ComTruise;
int thatIndex = MyList.SkipWhile(p => p.Name != myName).Count();

リストが非常に大きい場合、インデックスを取得するためのより最適な方法はありますか?

4

4 に答える 4

40

FindIndexを使用できます

string myName = "ComTruise";
int myIndex = MyList.FindIndex(p => p.Name == myName);

注:指定された述語によって定義された条件に一致する項目がリスト内に見つからない場合、FindIndexは -1 を返します。

于 2013-06-23T19:14:17.720 に答える
8

これを行う単純な拡張メソッドを作成することは理にかなっています。

public static int FindIndex<T>(
    this IEnumerable<T> collection, Func<T, bool> predicate)
{
    int i = 0;
    foreach (var item in collection)
    {
        if (predicate(item))
            return i;
        i++;
    }
    return -1;
}
于 2013-06-23T20:10:33.227 に答える
0
var p = MyList.Where(p => p.Name == myName).FirstOrDefault();
int thatIndex = -1;
if (p != null)
{
  thatIndex = MyList.IndexOf(p);
}

if (p != -1) ...
于 2013-06-23T19:13:27.007 に答える