相关疑难解决方法(0)

使用Foreach子句的Lambda表达式

可能重复:
为什么IEnumerable接口上没有ForEach扩展方法?

编辑

作为参考,这里是eric在评论中引用的博客文章

http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx

我想更多的好奇心,但C#规范Savants的一个...

为什么ForEach()子句在IQueryable/IEnumerable结果集上不起作用(或不可用)...

你必须首先转换你的结果ToList()或ToArray()大概是对C#迭代IEnumerables Vs的方式的技术限制.列表......是否与IEnumerables/IQuerable Collections的延迟执行有关.例如

var userAgentStrings = uasdc.UserAgentStrings
    .Where<UserAgentString>(p => p.DeviceID == 0 && 
                            !p.UserAgentString1.Contains("msie"));
//WORKS            
userAgentStrings.ToList().ForEach(uas => ProcessUserAgentString(uas));         

//WORKS
Array.ForEach(userAgentStrings.ToArray(), uas => ProcessUserAgentString(uas));

//Doesn't WORK
userAgentStrings.ForEach(uas => ProcessUserAgentString(uas));
Run Code Online (Sandbox Code Playgroud)

c# foreach lambda .net-3.5

50
推荐指数
2
解决办法
3万
查看次数

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

可能重复:
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)

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

c# foreach lambda readability

13
推荐指数
2
解决办法
987
查看次数

标签 统计

c# ×2

foreach ×2

lambda ×2

.net-3.5 ×1

readability ×1