繁体   English   中英

在C#中的对象列表中使用RemoveAll不删除项目

[英]Using RemoveAll in a list of objects in C# not removing items

我有一个消息列表。 我想浏览一下列表并执行以下操作:

  1. 如果SenderID = 100,则将ShowInSenderInbox和ShowInSenderOutbox值设置为零。
  2. 如果ReceiverID = 100,则将ShowInReceiverInbox值设置为零。 一旦满足以上两个条件,那么我要检查以下内容:
  3. 如果ShowInSenderInbox == 0 && ShowInSenderOutbox == 0 && ShowInReceiverInbox == 0,则从列表中删除该项目。

当前,我的代码将ShowInSenderInbox,ShowInSenderOutbox和ShowInReceiverInbox的值相应地设置为零。 但是,它不会从列表中删除与条件3匹配的项目。

这是完整的代码:

public class Message
{
   public int MessageID { get; set; }
   public int SenderID { get; set; }
   public int ReceiverID { get; set; }
   public int ShowInSenderInbox { get; set; }
   public int ShowInSenderOutbox { get; set; }
   public int ShowInReceiverInbox { get; set; }
}

public bool GetItem(Message I)
{           
   if (I.SenderID == 100)
   {
      I.ShowInSenderInbox = 0;
      I.ShowInSenderOutbox = 0;
   }
   else if (I.ReceiverID == 100)
   {
      I.ShowInReceiverInbox = 0;
   }

   if (I.ShowInSenderInbox == 0 && I.ShowInSenderOutbox == 0 && I.ShowInReceiverInbox == 0)
   {
      return true;
   }
   else
   {
      return false;
   }                             
}


List<Message> messages = new List<Message>() {
    new Message { MessageID=1, SenderID=100, ReceiverID=200, ShowInSenderInbox=1, ShowInSenderOutbox=1, ShowInReceiverInbox=1 },
    new Message { MessageID=2, SenderID=101, ReceiverID=300, ShowInSenderInbox=1, ShowInSenderOutbox=1, ShowInReceiverInbox=1 },
    new Message { MessageID=3, SenderID=102, ReceiverID=100, ShowInSenderInbox=1, ShowInSenderOutbox=0, ShowInReceiverInbox=0 },
    new Message { MessageID=4, SenderID=100, ReceiverID=101, ShowInSenderInbox=0, ShowInSenderOutbox=1, ShowInReceiverInbox=0 },
    new Message { MessageID=5, SenderID=200, ReceiverID=300, ShowInSenderInbox=1, ShowInSenderOutbox=0, ShowInReceiverInbox=0 },
    new Message { MessageID=9, SenderID=100, ReceiverID=400, ShowInSenderInbox=1, ShowInSenderOutbox=1, ShowInReceiverInbox=1 },
    new Message { MessageID=11, SenderID=400, ReceiverID=100, ShowInSenderInbox=1, ShowInSenderOutbox=1, ShowInReceiverInbox=0 },
    new Message { MessageID=21, SenderID=80, ReceiverID=150, ShowInSenderInbox=1, ShowInSenderOutbox=0, ShowInReceiverInbox=1 },
    new Message { MessageID=23, SenderID=100, ReceiverID=300, ShowInSenderInbox=1, ShowInSenderOutbox=1, ShowInReceiverInbox=0 },
    new Message { MessageID=28, SenderID=50, ReceiverID=90, ShowInSenderInbox=1, ShowInSenderOutbox=0, ShowInReceiverInbox=1 },
    new Message { MessageID=29, SenderID=100, ReceiverID=900, ShowInSenderInbox=1, ShowInSenderOutbox=1, ShowInReceiverInbox=1 },
    new Message { MessageID=22, SenderID=500, ReceiverID=900, ShowInSenderInbox=0, ShowInSenderOutbox=0, ShowInReceiverInbox=0 },
    new Message { MessageID=39, SenderID=409, ReceiverID=500, ShowInSenderInbox=0, ShowInSenderOutbox=0, ShowInReceiverInbox=0 },
    new Message { MessageID=41, SenderID=105, ReceiverID=900, ShowInSenderInbox=0, ShowInSenderOutbox=0, ShowInReceiverInbox=0 }
 };

( from item in messages
  where item.SenderID == 100 || item.ReceiverID == 100
  select item )
               .ToList()
               .RemoveAll( I => GetItem(I) );

http://www.geocities.ws/sonnyk2015/dosscreen2.png

只需添加此行:

messages.RemoveAll(i => i.ShowInSenderInbox == 0 && i.ShowInSenderOutbox == 0 && i.ShowInReceiverInbox == 0);

C#列表<object> .RemoveAll() - 如何删除列表的子集?<div id="text_translate"><p> 我有两个具有多个匹配属性的<strong>feeds_Auto</strong>和<strong>Product</strong>类。 对于这个特殊问题,AutoID 是我需要使用的唯一字段。</p><p> 我有一个包含数百个<em>唯一</em>条目的List&lt;FeedsAuto&gt; 。 我有一个小List&lt;Product&gt;有 10、20 个<em>唯一</em>条目。 我现在想从大列表中删除小列表中的所有项目。</p><p> 如何使用 RemoveAll({lambda expression}) 来完成此操作? 我发现的所有示例都依赖于简单类型(字符串、整数等)的通用列表。</p><pre> private static int DoInserts(ref List&lt;Model.feeds_Auto&gt; source, ref List&lt;Model.Product&gt; target, Guid companyID) { List&lt;Model.Product&gt; newProductList = new List&lt;Model.Product&gt;(); List&lt;Model.Product&gt; dropSourceList = new List&lt;Model.Product&gt;(); using (var db = Helpers.GetProdDB()) { foreach (var src in source) { var tgt = target.Where(a =&gt; a.alternateProductID == src.AutoID &amp;&amp; a.LastFeedUpdate &lt; src.DateModified).FirstOrDefault(); if (tgt == null) { newProductList.Add(new Model.Product{...}); dropSourceList.Add(src); } } db.SaveChanges(); if (dropSourceList.Count &gt; 0) { source.RemoveAll(????); } } }</pre><p> 在循环中执行此操作并不困难:</p><pre> foreach (var drop in dropSourceList) { source.RemoveAll(a =&gt; a.AutoID == drop.AutoID); }</pre><p> (对我来说)循环一个集合以在每次传递中为一个项目调用 RemoveAll 只是没有意义。</p></div></object>

[英]C# List<object>.RemoveAll() - How to remove a subset of the list?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 名单 <T> RemoveAll()不会删除项目 使用LINQ从列表中删除项目(removeAll) 从列表中删除项目更快 <object> -RemoveAll或foreach循环? 删除C#/ XNA中的列表项 C#,RemoveAll的问题仅删除特定索引 使用 RemoveAll 从列表中删除项目 C#列表<object> .RemoveAll() - 如何删除列表的子集?<div id="text_translate"><p> 我有两个具有多个匹配属性的<strong>feeds_Auto</strong>和<strong>Product</strong>类。 对于这个特殊问题,AutoID 是我需要使用的唯一字段。</p><p> 我有一个包含数百个<em>唯一</em>条目的List&lt;FeedsAuto&gt; 。 我有一个小List&lt;Product&gt;有 10、20 个<em>唯一</em>条目。 我现在想从大列表中删除小列表中的所有项目。</p><p> 如何使用 RemoveAll({lambda expression}) 来完成此操作? 我发现的所有示例都依赖于简单类型(字符串、整数等)的通用列表。</p><pre> private static int DoInserts(ref List&lt;Model.feeds_Auto&gt; source, ref List&lt;Model.Product&gt; target, Guid companyID) { List&lt;Model.Product&gt; newProductList = new List&lt;Model.Product&gt;(); List&lt;Model.Product&gt; dropSourceList = new List&lt;Model.Product&gt;(); using (var db = Helpers.GetProdDB()) { foreach (var src in source) { var tgt = target.Where(a =&gt; a.alternateProductID == src.AutoID &amp;&amp; a.LastFeedUpdate &lt; src.DateModified).FirstOrDefault(); if (tgt == null) { newProductList.Add(new Model.Product{...}); dropSourceList.Add(src); } } db.SaveChanges(); if (dropSourceList.Count &gt; 0) { source.RemoveAll(????); } } }</pre><p> 在循环中执行此操作并不困难:</p><pre> foreach (var drop in dropSourceList) { source.RemoveAll(a =&gt; a.AutoID == drop.AutoID); }</pre><p> (对我来说)循环一个集合以在每次传递中为一个项目调用 RemoveAll 只是没有意义。</p></div></object> 如何在条件下使用RemoveAll删除列表中的多个项目? 使用C#以编程方式删除HtmlElement对象 从C#对象列表中删除某些对象
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM