foreach(... in ...)或.ForEach(); 就是那个问题

Ric*_*ett 13 c# foreach lambda readability

可能重复:
C#foreach vs functional each

这是关于编码可读性的问题.

我有一个XDocument和一个List<string>包含我需要屏蔽的敏感信息的元素的名称(在本例中用下划线替换).

XDocument xDoc;
List<string> propertiesToMask;
Run Code Online (Sandbox Code Playgroud)

这可以用两种方式编写,使用传统foreach循环,或使用.ForEachlamba语法的方法.

foreach (string propertyToMask in propertiesToMask)
{
    foreach (XElement element in xDoc.Descendants(propertyToMask))
    {
        element.SetValue(new string('_', element.Value.Length));
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

propertiesToMask
    .ForEach(propertyToMask => xDoc.Descendants(propertyToMask).ToList()
        .ForEach(element => element.SetValue(new string('_', element.Value.Length))));
Run Code Online (Sandbox Code Playgroud)

您认为哪种方法最具可读性?为什么?如果您更喜欢第二个示例,您将如何呈现它以获得最大可读性?

Meh*_*ari 14

Eric Lippert 在他的博客上有一个很好的参与.总而言之,完成的任务ForEach是产生副作用,这可能与C#中的编程功能样式无关.


cor*_*ews 14

foreach (string propertyToMask in propertiesToMask)
{
    foreach (XElement element in xDoc.Descendants(propertyToMask))
    {
        element.SetValue(new string('_', element.Value.Length));
    }
}
Run Code Online (Sandbox Code Playgroud)

因为间距使得扫描非常简单.第二个是混乱的,我必须实际阅读它.

  • 可读代码与高效代码一样重要(只要它不是代码味道) (2认同)