为C#中的每个表达式的lambda添加一个条件

时间:2015-04-09 14:48:02

标签: c# lambda

基本上我想这样做

foreach (var TA in TheToAddresses)
{
    if(TA.ToLower () != "a@a.com")
    {
        _message.ToRecipients.Add(TA);
    }
}

我该如何修改 这条线还包括条件? 感谢

TheToAddresses.ForEach(TA => _message.ToRecipients.Add(TA));

6 个答案:

答案 0 :(得分:3)

TheToAddresses.ForEach(TA => 
{
  if(TA.ToLower () != "a@a.com")
     _message.ToRecipients.Add(TA) 
});

如果ToRecipients类型为List,您可以写:

_message.ToRecipients.AddRange(TheToAddresses.Where(TA => TA.ToLower() != "a@a.com"));

答案 1 :(得分:2)

您可以使用{}包装它来编写多行lambda方法:

TheToAddresses.ForEach(TA =>
    {
        if(TA.ToLower () != "a@a.com")
        {
             _message.ToRecipients.Add(TA);
        }
     });

答案 2 :(得分:1)

TheToAddresses.Where(r=> r.ToLower () != "a@a.com").ToList()
.ForEach(TA => _message.ToRecipients.Add(TA));

答案 3 :(得分:1)

TheToAddresses.Where(address => address.ToLower() != "a@a.com").ToList().ForEach(TA => _message.ToRecipients.Add(TA));

答案 4 :(得分:0)

TheToAddresses.Where(ta => ta.ToLower() != "a@a.com")
              .ForEach(TA => _message.ToRecipients.Add(TA));

答案 5 :(得分:0)

你所写的几乎是正确的方式。 LINQ不应该有副作用。见http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

foreach (var TA in TheToAddresses)
{
    if(!StringComparer.OrdinalIgnoreCase.Equals(TA, "a@a.com"))
    {
        _message.ToRecipients.Add(TA);
    }
}

唯一的一点是,如果您想进行不区分大小写的比较,则不要ToLower() / ToUpper()(请参阅http://blog.codinghorror.com/whats-wrong-with-turkey/,从字符串开始就是它真正开始的地方变得毛茸茸的