我只是习惯使用lambdas和所有这些好东西。但是,我不知道在这种情况下我需要提供什么论点。T []参数在字符串[]。Foreach()
我试图修改I字符串来替换字典中的条目的所有实例与它的值,没什么太花哨,我可以用一个简单的foreach
循环做到这一点,但我试图使用它作为学习练习。
到目前为止我的代码如下:
string maskString = Masks[alias];
Regex regex = new Regex(@"({[\w+|\d]+})");
MatchCollection matches = regex.Matches(maskString);
string[] constants = matches.Cast<Match>().Select(m => m.Value).ToArray();
string maskedString = "";
if (constants.All(constant => Constants.ContainsKey(constant)))
{
constants.ForEach(constant => maskedString = maskedString.Replace(constant, Constants[constant]));
}
不过,我收到此错误:There is no argument given that corresponds to the required formal parameter 'action' of 'Array.ForEach<T>(T[], Action<T>)'
。在我看来,我以lambda
表达式的形式提供动作,但我不知道为什么它需要另一个数组或我应该给它的数组。
我曾尝试提供它与null
,string[]
和但这些只会导致更多的错误。
我可以使用这种结构进行这种操作吗,还是仅仅使用传统的foreach
循环会更实用?
Array.ForEach不是一个扩展方法(这是阵列的只是一个静态方法),所以用这样的:'Array.ForEach(常量,常量=> maskedString = maskedString.Replace(constant,Constants [constant]));'无论如何,当涉及“副作用”时,我更喜欢标准的foreach循环。 – digEmAll
保持简单和可维护性。 LINQ语句可能很有用,但它们也很难解释。 –
@digEmAll我注意到,在您评论之前,通过查看文档(https://msdn.microsoft.com/en-us/library/zecdkyw2(v=vs.110).aspx),我没有真正看到这个评论,直到我发布我的答案,但谢谢你!出于兴趣,为什么它是大多数'IEnumerable'的扩展方法,但不是'[]'? –