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

C# get object from list where object.value equals

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

所在的对象
Class Table{

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

    //some methods and functions
}

我的问题是有没有一种有效的方法可以使用 linq 从这个列表中获取指定的对象,或者我只是用基本的搜索算法遍历它。

对于基本搜索算法,我的意思是:

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

那么有没有更有效的方法来使用 linq 来做到这一点?

您可以使用 LINQ 轻松完成,但效率不会更高:

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

现在 match 将是 null 如果 没有 table 符合该标准。你需要弄清楚在这种情况下你想要发生什么。

LINQ 代码更短,但仍必须遍历列表中的每个 table,直到找到匹配项。

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