C#在List <t> </t>中查找对象

时间:2012-05-19 15:08:52

标签: c# list find exists

我有一个清单。我想知道如何编写LINQ左右,以查找它们是否存在一个id =“CLR”的MyTypes的obj。

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

我知道我通过迭代List中的项目来做到这一点,但这比使用LINQ语句要耗费时间。如果我错了,请纠正我。

可以提供帮助。

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

可能是这样的:

MyType item = MyList.FirstOrDefault(x => x.id == "CLR");

if (item != null)
{
    int index = MyList.IndexOf(item);
    // do something
}

答案 3 :(得分:0)

我认为你想要的是

var obj = myList.FirstOrDefault(x => x.id == "CLR");
if(obj != null)
{
    //do stuff here
}