我正在尝试搜索第一个列表项的索引,其值“hello”且它是 index 高于 15 。 这显然不是这样,因为当我提到 p 时,我指的是值,而不是字符串本身(IndexOf查找列表中第一次出现“hello”的索引,因为 p == string )
int soucasny = list1.FindIndex(p => p == "hello" || list1.IndexOf(p) > 15);
有没有办法达到预期的效果?选择可能吗?
答案 0 :(得分:9)
您可以为IndexOf
int soucasny = list1.IndexOf("hello", 15);
答案 1 :(得分:2)
使用带有谓词的List<T>.FindIndex Method (Int32, Predicate<T>)
并指定开始搜索的索引,如:
int soucasny = list1.FindIndex(15, p => p == "hello");
如果你有List<string>
,那么使用List<T>.IndexOf
会给你结果,但是如果你有一个自定义对象列表,那么你可能需要谓词。像:
List<Student> studentList = new List<Student>();
int index = studentList.FindIndex(15, p=> p.StudentName == "Some Name");
答案 2 :(得分:1)
@ Selman22为您的确切问题提供最正确,最有效的答案。如果您可能有非List
序列或需要从过滤器表达式中访问元素索引,我仅提供以下内容作为附录:
public static int FirstIndexWhere<T>(
this IEnumerable<T> sequence,
Func<T, int, bool> predicate)
{
if (sequence == null)
throw new ArgumentNullException("sequence");
if (predicate == null)
throw new ArgumentNullException("predicate");
var index = 0;
for (var enumerator = sequence.GetEnumerator(); enumerator.MoveNext(); ++index)
{
if (predicate(enumerator.Current, index))
return index;
}
return -1;
}
使用示例:
int soucasny = list1.FirstIndexWhere((p, i) => p == "hello" && i > 15);