如何在list <object>中查找对象值

时间:2019-05-14 04:58:32

标签: c#

我有一个区域对象列表,如何找到对象值?

List<object> _area = new List<object>();
_area.Add(new { area_pid = _area_pid, info = _area_name });

如果未找到area_pid,我需要在列表中找到它,然后添加一个新对象。

4 个答案:

答案 0 :(得分:5)

如果您不必为您所在的区域创建完整的类(我不明白为什么不这样做,它似乎只是几个属性,可能是三行代码),则可以使用ValueTuple < / p>

List<(int area_pid, string area_name)> areas = new List<(int, string)>();
areas.Add((3,"New York"));
areas.Add((4,"New Jersey"));
areas.Add((5,"Chicago"));

//find example
var newAreas = areas.Where(a => a.area_name.StartsWith("New"));

我个人不喜欢创建专用的存储类,但是您可能会对它感兴趣。

是一个c#7 / .net 4.7构造

查看更多信息:

https://blogs.msdn.microsoft.com/mazhou/2017/05/26/c-7-series-part-1-value-tuples/

How to create a List of ValueTuple?

答案 1 :(得分:4)

给出

public class Something
{
   public Something(string area, string name)
   {
      Area = area;
      Name = name;
   }

   public string Area { get; set; }
   public string Name { get; set; }      
}

用法

那么您可以简单地使用Where语句

var somethings = new List<Something>();
somethings.Add(new Something("sad", "bobo"));

var results = somethings.Where(x => x.Area == "asd");

或者,如果您假设只有一个SingleOrDefaultFirstOrDefault

var result = somethings.SingleOrDefault(x => x.Area == "asd");

答案 2 :(得分:0)

您可以使用

foreach(Object item in _area) {

  System.Reflection.PropertyInfo pi = item.GetType().GetProperty("name");
  String yourValue = (String)(pi.GetValue(item, null));
}

但是,我建议您存储一个模型(类)。

答案 3 :(得分:0)

另一种选择是使用ToList()方法定义_area。

var _area = new []{new { area_pid = _area_pid, info = _area_name}}.ToList();
_area.Add(new { area_pid = _area_pid2, info = _area_name2 });

现在您可以使用

_area.Where(x=>x.area_pid==1);

更新:基于谜团的评论

var _area = new []{new { area_pid = default(int), info = default(string)}}.Take(0).ToList();
_area.Add(new { area_pid = _area_pid2, info = _area_name2 });