Я просто привык к использованию лямбда и всему этому хорошему. Однако я не знаю, какой аргумент мне нужно предоставить в этом случае.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[]
и new [] {typeof(string)}
, но это просто вызывает больше ошибок.
Возможно ли, чтобы эта операция проводилась с использованием этой структуры или было бы более практичным использовать традиционный цикл foreach
?
Array.ForEach не метод расширения (это просто статический метод Array), поэтому использовать его как это: 'Array.ForEach (константы, константа => maskedString = maskedString.Replace (константа, константы [константа])); в любом случае, я бы предпочел стандартный цикл foreach, когда задействованы побочные эффекты. – digEmAll
Держите его простым и удобным. Операторы LINQ могут быть полезны, но их также трудно интерпретировать. –
@ digEmAll Я заметил, что как раз перед тем, как вы прокомментировали, просмотрев документы (https://msdn.microsoft.com/en-us/library/zecdkyw2(v=vs.110).aspx), я действительно не видел этот комментарий, пока я не отправил свой ответ, но спасибо! Из интереса, почему это метод расширения для большинства 'IEnumerable' s, но не '[]' s? –