C# 在 List 中查找对象

本文关键字:查找 对象 List | 更新日期: 2023-09-27 18:34:37

我有一个列表。我想知道如何编写 LINQ 左右,以查找它们是否存在 id = "CLR" 的 MyType 的对象。

我想知道它是否存在及其索引。因此,如果它存在,那么通过它的索引,我可以用MyType的新对象替换它,否则添加它。

我知道我可以通过迭代列表中的项目来做到这一点,但这比使用 LINQ 语句更耗时。如果我错了,请纠正我。

任何人都可以提供帮助。

C# 在 List<T> 中查找对象

你真的不需要 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>或类似内容,而是使用列表。

除非您打算在某个时候迭代整个集合,否则改用字典可能更有意义。 这样做将允许您按键查找项目,检查按键是否存在项目,以及按键插入。 不仅如此,这些类型的操作在字典上更快,因为它本质上是一个哈希表。

它可以是这样的:

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
}