簡體   English   中英

為C#中的每個表達式向lambda添加一個條件

[英]add a condition to the lambda for each expression in C#

基本上我想這樣做

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

如何修改此行以同時包含條件? 謝謝

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

如果ToRecipientsList類型,則可以編寫:

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

您可以使用{}包裝多行lambda方法:

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

您寫的幾乎是正確的方法。 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/ ,從字符串開始的地方它真的開始變得毛茸茸的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM