MyList
List<Person>
可能有Person
,其Name
属性设置为“ComTruise”。我需要该列表中Person
的索引。不是Person
,只是它的索引。获取列表中物品的索引
什么我现在做的是:
string myName = ComTruise;
int thatIndex = MyList.SkipWhile(p => p.Name != myName).Count();
我怎么可以做的更好,或者使用的IndexOf方法来执行相同的任务?
MyList
List<Person>
可能有Person
,其Name
属性设置为“ComTruise”。我需要该列表中Person
的索引。不是Person
,只是它的索引。获取列表中物品的索引
什么我现在做的是:
string myName = ComTruise;
int thatIndex = MyList.SkipWhile(p => p.Name != myName).Count();
我怎么可以做的更好,或者使用的IndexOf方法来执行相同的任务?
因为它是一个ObservableCollection
,你可以试试这个
int index = MyList.IndexOf(MyList.Where(p => p.Name == "ComTruise").FirstOrDefault());
它将返回-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;
}
}
var p = MyList.Where(p => p.Name == myName).FirstOrDefault();
int thatIndex = -1;
if (p != null)
{
thatIndex = MyList.IndexOf(p);
}
if (p != -1) ...
这可能是有意义的编写,做一个简单的扩展方法:
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;
}
这几乎是的IndexOf做什么... –
是MYLIST自己的收藏或者是列表? –
对不起,改正了。 IndexOf的语法怎么样? – Sturm