如何从通用列表中的每个对象中删除特定项

时间:2016-06-23 15:08:46

标签: c# list loops generics foreach

背景

我有一个通用对象列表。每个通用对象都有一个我需要删除的特定字段。

我像这样创建列表。

list = new List<Object>();
list = JsonConvert.DeserializeObject<List<T>>(OutJson, new BooleanJsonConverter());

但是我需要从该列表中的每个对象中删除一个项目。但是我不知道列表中有多少或哪些对象。我知道总会有一个我需要删除的字段。

的伪代码

我认为我需要做这样的事情,但是要用通用的方式。

    //Loop through list objects, and for each object, loop through its 
    //properties. If any of the properties match a string, remove 
    //that property from the object.  

                foreach (var object in list)
                {
                    foreach (var item in object)
                    {
                        if(item.ToUpper() == "SpecificKey")
                        {
                            list.Remove(item);

                        }
                    }

                }

问题

如何遍历列表中的通用对象并删除特定项目(如果存在)?

2 个答案:

答案 0 :(得分:1)

我认为要完成此操作,最好将对象标记为动态。

然后这会奏效。

List<dynamic> list = JsonConvert.DeserializeObject<List<T>>(OutJson, new BooleanJsonConverter());

list.RemoveAll(x=>x["SpecificKey"]!=null);

答案 1 :(得分:0)

  

我有一个通用对象列表。每个通用对象都有一个我需要删除的特定字段。

如果您尝试访问异议的特定属性,则可以使用反射。请参阅答案:

Get property value from string using reflection in C#

  

然后我需要从该列表中的每个对象中删除一个项目。但是我不知道列表中有多少或哪些对象。我知道总会有一个我需要删除的字段。

您的伪代码是代码令人困惑,但您似乎只是想从父对象中删除子代。如果是这种情况,并且子项是复杂对象,则将其设置为null

如果您的意思是说您需要列表中包含具有指定属性名称的属性的任何对象,那么您应该知道在使用foreach进行迭代时无法从列表中删除项目。请参阅答案:

C# List - Removing items while looping / iterating