C#从列表中获取object.value等于的对象

时间:2015-01-26 08:19:04

标签: c# linq

所以我有一个类的对象列表。在此列表中,我想获取Table.name == "value"

所在的对象
Class Table{

    public string name;
    private string primarykey;
    private string[] columnNames;

    //some methods and functions
}

我的问题是使用l​​inq从这个列表中获取指定对象的有效方法,或者我只是通过基本搜索算法循环使用。

使用基本搜索算法我的意思是:

foreach(Table t in tables)
{
    if(t.name == "value")
        return t;
}

例如,使用linq有更有效的方法吗?

1 个答案:

答案 0 :(得分:12)

您可以轻松地使用LINQ,但它不会更有效:

var match = tables.FirstOrDefault(t => t.name == value);

如果没有表符合该条件,则match将为null。在这种情况下,你需要弄清楚你想要发生什么。

LINQ代码较短,但仍需要迭代列表中的每个表,直到找到匹配为止。

您可能需要考虑Dictionary<string, Table>将名称映射到表格 - 但显然要求每个名称只有一个表格。此外,除非你真的有很多桌子,否则你可能会发现它真的没有更快。它是O(1)(假设没有散列冲突)而不是O(n),但是当n很小时,O(n)实际上非常快。我强烈建议你在担心它的效率之前检查这是否真的是一个瓶颈。