public struct PLU {
public int ID { get; set; }
public string name { get; set; }
public double price { get; set; }
public int quantity {get;set;}
}
public static ObservableCollection<PLU> PLUList = new ObservableCollection<PLU>();
我有如上所述的ObservableCollection。现在我想在 PLUList 中搜索ID,并获取其索引:
int index = PLUList.indexOf();
if (index > -1) {
// Do something here
}
else {
// Do sth else here..
}
什么是快速修复?
编辑:
我们假设有些项目已添加到PLUList,我想添加另一个新项目。但在添加之前,我想检查列表中是否已存在ID。如果确实如此,那么我想在数量上添加+1。
答案 0 :(得分:16)
使用LINQ: - )
var q = PLUList.Where(X => X.ID == 13).FirstOrDefault();
if(q != null)
{
// do stuff
}
else
{
// do other stuff
}
如果你想保留一个结构,请使用它:
var q = PLUList.IndexOf( PLUList.Where(X => X.ID == 13).FirstOrDefault() );
if(q > -1)
{
// do stuff
}
else
{
// do other stuff
}
答案 1 :(得分:3)
如果要从列表中检索项目,只需使用LINQ:
PLU item = PLUList.Where(z => z.ID == 12).FirstOrDefault();
但这会返回项目本身,而不是索引。你为什么要索引?
此外,如果可能,您应该使用class
代替struct
。然后,您可以针对item
测试null
,看看是否在集合中找到了ID。
if (item != null)
{
// Then the item was found
}
else
{
// No item found !
}
答案 2 :(得分:2)
这是一个快速修复。
int findID = 3;
int foundID= -1;
for (int i = 0; i< PLUList.Count; i++)
{
if (PLUList[i].ID == findID)
{
foundID = i;
break;
}
}
// Your code.
if (foundID > -1) {
// Do something here
...
答案 3 :(得分:2)
尽管这篇文章很旧并且已经回答了,但对其他人还是有帮助的,所以我来回答。
您可以创建类似于List<T>.FindIndex(...)
方法的扩展方法:
public static class ObservableCollectionExtensions
{
public static int FindIndex<T>(this ObservableCollection<T> ts, Predicate<T> match)
{
return ts.FindIndex(0, ts.Count, match);
}
public static int FindIndex<T>(this ObservableCollection<T> ts, int startIndex, Predicate<T> match)
{
return ts.FindIndex(startIndex, ts.Count, match);
}
public static int FindIndex<T>(this ObservableCollection<T> ts, int startIndex, int count, Predicate<T> match)
{
if (startIndex < 0) startIndex = 0;
if (count > ts.Count) count = ts.Count;
for (int i = startIndex; i < count; i++)
{
if (match(ts[i])) return i;
}
return -1;
}
}
用法:
int index = PLUList.FindIndex(x => x.ID == 13);
if (index > -1)
{
// Do something here...
}
else
{
// Do something else here...
}
答案 4 :(得分:1)
这只是一个普通的收藏品。为什么不能迭代它,检查ID并返回对象的索引。有什么问题?
int index = -1;
for(int i=0;i<PLUList.Count;i++) {
PLU plu = PLUList[i];
if (plu.ID == yourId) {
index = i;
break;
}
}
if (index > -1) {
// Do something here
}
else {
// Do sth else here..
}
编辑:LINQ VERSION
private void getIndexForID(PLUListint idToFind,ObservableCollection<PLU> PLUList) {
PLU target = PLUList.Where( z => z.ID == yourID ).FirstOrDefault();
return target == null ? -1 : PLUList.IndexOf ( target );
}