在MyList
List<Person>
有可能是Person
与它的Name
属性设置为"ComTruise".我需要该MyList
列表中的索引.不是Person
,只是它的索引.
我现在正在做的是:
string myName = ComTruise;
int thatIndex = MyList.SkipWhile(p => p.Name != myName).Count();
Run Code Online (Sandbox Code Playgroud)
如何更好地完成或使用IndexOf方法执行相同的任务?
Chr*_*ris 34
您可以使用FindIndex
string myName = "ComTruise";
int myIndex = MyList.FindIndex(p => p.Name == myName);
Run Code Online (Sandbox Code Playgroud)
注意:如果在列表中找不到与提供的谓词定义的条件匹配的项,则FindIndex返回-1.
key*_*rdP 18
因为它是一个ObservableCollection
,你可以试试这个
int index = MyList.IndexOf(MyList.Where(p => p.Name == "ComTruise").FirstOrDefault());
Run Code Online (Sandbox Code Playgroud)
-1
如果您的收藏中不存在"ComTruise" ,它将返回.
正如评论中所提到的,这会执行两次搜索.您可以使用for循环优化它.
int index = -1;
for(int i = 0; i < MyList.Count; i++)
{
//case insensitive search
if(String.Equals(MyList[i].Name, "ComTruise", StringComparison.OrdinalIgnoreCase))
{
index = i;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
编写一个执行此操作的简单扩展方法可能是有意义的:
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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20970 次 |
最近记录: |