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

kpp*_*kpp 6 c# linq

所以我有一个类的对象列表.在这个列表中我想得到对象在哪里Table.name == "value"

Class Table{

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

    //some methods and functions
}
Run Code Online (Sandbox Code Playgroud)

我的问题是有一个有效的方法从linq获取此列表中的指定对象,或者我只是通过基本的搜索算法循环这个.

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

foreach(Table t in tables)
{
    if(t.name == "value")
        return t;
}
Run Code Online (Sandbox Code Playgroud)

那么有没有一种更有效的方法来实现这一点,例如linq?

Jon*_*eet 12

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

var match = tables.FirstOrDefault(t => t.name == value);
Run Code Online (Sandbox Code Playgroud)

现在matchnull没有符合该标准的表格.在这种情况下,你需要弄清楚你想要发生什么.

LINQ代码较短,但仍需迭代列表中的每个表,直到找到匹配项.

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

  • @HossamBarakat:就像我做的那样,两次. (3认同)
  • 4分钟前问过,3分钟前回答.Skeet再次罢工. (2认同)