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

在C#中的对象列表中使用RemoveAll#不删除项,c#,linq,C#,Linq,我有一个邮件列表。我想浏览列表并执行以下操作: 如果SenderID=100,则将ShowInSenderInbox和ShowInSenderOutbox的值设置为零 如果ReceiverID=100,则将ShowInReceiverInbox值设置为零。 一旦满足上述两个条件,我想检查以下内容: 如果ShowInSenderInbox==0&&ShowInSenderOutbox==0&&ShowInReceiveInbox==0 然后从列表中删除此项 目前,我的代码将ShowInSender

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

  • 如果SenderID=100,则将ShowInSenderInbox和ShowInSenderOutbox的值设置为零
  • 如果ReceiverID=100,则将ShowInReceiverInbox值设置为零。 一旦满足上述两个条件,我想检查以下内容:
  • 如果ShowInSenderInbox==0&&ShowInSenderOutbox==0&&ShowInReceiveInbox==0 然后从列表中删除此项
  • 目前,我的代码将ShowInSenderInbox、ShowInSenderOutbox和ShowInReceiveInbox的值相应地设置为零。但是,它不会从列表中删除与条件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) );
    
    公共类消息
    {
    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;}
    }
    公共bool GetItem(消息一)
    {           
    如果(I.SenderID==100)
    {
    I.ShowInSenderInbox=0;
    I.ShowInSenderOutbox=0;
    }
    否则,如果(I.接收方==100)
    {
    I.ShowInReceiverInbox=0;
    }
    如果(I.ShowInSenderInbox==0&&I.ShowInSenderOutbox==0&&I.ShowInReceiverInbox==0)
    {
    返回true;
    }
    其他的
    {
    返回false;
    }                             
    }
    列表消息=新列表(){
    新邮件{MessageID=1,SenderID=100,ReceiverID=200,ShowInSenderInbox=1,ShowInSenderOutbox=1,ShowInReceiverInbox=1},
    新邮件{MessageID=2,SenderID=101,ReceiverID=300,ShowInSenderInbox=1,ShowInSenderOutbox=1,ShowInReceiverInbox=1},
    新邮件{MessageID=3,SenderID=102,ReceiverID=100,ShowInSenderInbox=1,ShowInSenderOutbox=0,ShowInReceiverInbox=0},
    新邮件{MessageID=4,SenderID=100,ReceiverID=101,ShowInSenderInbox=0,ShowInSenderOutbox=1,ShowInReceiverInbox=0},
    新邮件{MessageID=5,SenderID=200,ReceiverID=300,ShowInSenderInbox=1,ShowInSenderOutbox=0,ShowInReceiverInbox=0},
    新邮件{MessageID=9,SenderID=100,ReceiverID=400,ShowInSenderInbox=1,ShowInSenderOutbox=1,ShowInReceiverInbox=1},
    新邮件{MessageID=11,SenderID=400,ReceiverID=100,ShowInSenderInbox=1,ShowInSenderOutbox=1,ShowInReceiverInbox=0},
    新邮件{MessageID=21,SenderID=80,ReceiverID=150,ShowInSenderInbox=1,ShowInSenderOutbox=0,ShowInReceiverInbox=1},
    新邮件{MessageID=23,SenderID=100,ReceiverID=300,ShowInSenderInbox=1,ShowInSenderOutbox=1,ShowInReceiverInbox=0},
    新邮件{MessageID=28,SenderID=50,ReceiverID=90,ShowInSenderInbox=1,ShowInSenderOutbox=0,ShowInReceiverInbox=1},
    新邮件{MessageID=29,SenderID=100,ReceiverID=900,ShowInSenderInbox=1,ShowInSenderOutbox=1,ShowInReceiverInbox=1},
    新邮件{MessageID=22,SenderID=500,ReceiverID=900,ShowInSenderInbox=0,ShowInSenderOutbox=0,ShowInReceiverInbox=0},
    新邮件{MessageID=39,SenderID=409,ReceiverID=500,ShowInSenderInbox=0,ShowInSenderOutbox=0,ShowInReceiverInbox=0},
    新邮件{MessageID=41,SenderID=105,ReceiverID=900,ShowInSenderInbox=0,ShowInSenderOutbox=0,ShowInReceiverInbox=0}
    };
    (来自消息中的项目)
    其中item.SenderID==100 | | item.ReceiverID==100
    选择项目)
    托利斯先生()
    .RemoveAll(I=>GetItem(I));
    

    只需再添加这一行:

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

    您不是在修改原始列表,而是(可能)在修改一个完全不同的列表。满足上述两个条件是什么意思?哪两个条件?谢谢杰夫和格兰特。谢谢@Koder101。我会的。