我有一个清单。我想知道如何编写 LINQ 来查找它们是否存在 id = "CLR" 的 MyTypes 的 obj。
我想知道它是否存在及其索引。因此,如果它存在,那么我可以通过它的索引替换为 MyTypes 的新对象,否则添加它。
我知道我可以通过迭代 List 中的项目来做到这一点,但这比使用 LINQ 语句要耗时。如果我错了,请纠正我。
任何人都可以提供帮助。
您实际上并不需要 LINQ。有方便的List<T>.FindIndex
方法
List<Foo> foos = ...
int index = foos.FindIndex(foo => foo != null && foo.Id == "CLR");
if(index != -1)
{
Foo replacement = ...
foos[index] = replacement;
}
else
{
Foo toAdd = ...
foos.Add(toAdd);
}
顺便说一句,您确定您实际上不需要某种查找表吗?您的使用模式表明您不是一个Dictionary<string, Foo>
或类似的而不是一个列表。
除非您打算在某个时候迭代整个集合,否则使用 Dictionary 可能更有意义。这样做将允许您按键定位项目,按键检查项目是否存在,并按键插入。不仅如此,这些类型的操作在字典上更快,因为它本质上是一个哈希表。
它可能是这样的:
MyType item = MyList.FirstOrDefault(x => x.id == "CLR");
if (item != null)
{
int index = MyList.IndexOf(item);
// do something
}
我认为你想要的是
var obj = myList.FirstOrDefault(x => x.id == "CLR");
if(obj != null)
{
//do stuff here
}