簡體   English   中英

如何將這個foreach循環轉換為linq?

[英]how can I convert this foreach loop to linq?

我對Linq很陌生。 我想將這些代碼行轉換為linq lambda表達式,如果有意義,我該如何實現?

foreach (var Type in Essay.Text)
{
     string text =
          $"{"here is result"}\n{method(Type)}";
     if (text.Length <= 20 && !string.IsNullOrEmpty(method(Type)))
     {
          Essay.Total += text;
     }
}

Resharper的幫助下:

Essay.Total = string.Concat(
            Essay.Text.Select(Type => new {Type, text = $"{"here is result"}\n{method(Type)}"})
                .Where(@t => @t.text.Length <= 20 && !string.IsNullOrEmpty(method(@t.Type)))
                .Select(@t => @t.text)
            );

像這樣:

foreach (var type in from type in Essay.Text 
         let text = $"{"here is result"}\n{method(Type)}"
         where text.Length <= 20 && !string.IsNullOrEmpty(method(Type)) select type)
{
    Essay.Total += type;
}

一些提示:

  • 沒有理由兩次調用方法 ,只需使用let對其進行緩存
  • 您還可以在構造最終字符串之前檢查文本的長度

這應該為您完成工作:

var texts = from type in essay.Text
            let methodResult = method(type)
            where !string.IsNullOrEmpty(methodResult)
            let text = $"here is result\n{methodResult}"
            where text.Length <= 20
            select text;

essay.Total += string.Concat(texts);

暫無
暫無

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

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