在相同属性的List <object>中查找对象

时间:2019-05-05 22:29:44

标签: c# linq

我正在创建一个包含不同对象List<object>的列表,我需要在它们上使用linq。

所有对象都具有“ name”属性,这是一些类对象:

   class project_node
    {
        public string name { get;set;  } // SAME
        public int level{ get; set; }
        public compiler_enum compiler{ get; set; }
    }

   class resource_node
    {
        public string name { get;set;  } // SAME
        public int level{ get; set; }
        public byte[] resource_data { get; set; }
        public compiler_enum compiler{ get; set; }
    }

   class codeblock_node
    {
        public string name { get;set;  } // SAME
        public string filename{ get;set;  }
        public int level{ get; set; }
        public string code{ get; set; }
        public compiler_enum compiler{ get; set; }
    }

所以我的列表中有一些project_node,一些resource_node和一些codeblock_node ...

project_file_list的声明:

List<object> project_file_list = new List<object>{};

如何使用linq在列表中查找和匹配名称? 像这样的东西:

object find_target = project_file_list.Find(findobj => findobj.name == "Name");

2 个答案:

答案 0 :(得分:3)

您可以使用如下界面:

interface IHaveName 
{
    string name {get;}
}

然后,所有对象都可以实现此接口:

class project_node: IHaveName
{ … }

您的列表应该是IHaveName的列表,而不是对象的列表

List<IHaveName> project_file_list = new List<IHaveName>
… etc...

,您的LINQ即可使用。

答案 1 :(得分:1)

由于要列出通用对象,因此将无法像平常一样进入相应的属性。

您可以执行以下操作:

client.startup_id