Думайте о лямбде, как о сокращении обычного метода.Лямбда, которую вы указали:
(x, y, z) => { if (x == y) z++; }
, преобразуется в:
void IncrementIfEqual(string x, string y, int z)
{
if (x == y) z++;
}
(у лямбд нет имени метода, поэтому я просто случайно назвал метод IncrementIfEqual
).Вы не возвращаете никакого значения внутри метода, поэтому метод возвращает void.Кроме того, аргумент z
, который вы передаете, увеличивается внутри метода, но не влияет на значение передаваемой исходной переменной. Например, если вы вызвали метод, который вы написали следующим образом ...
IncrementIfEqual(cellValue.ToString().Substring(0, 1), "1", variable1)
, тогда переменная1 останется тем же значением после вызова, потому что метод увеличил аргумент z, который не существует вне метода.Вы можете написать метод следующим образом ...
int IncrementIfEqual(string x, string y, int z)
{
return (x == y) ? ++z : z;
}
, который увеличивает значение z
и возвращает его, если x
и y
равны, в противном случае он просто возвращает исходное значение, переданное в.Затем вы могли бы назвать это так ...
variable1 = IncrementIfEqual(cellValue.ToString().Substring(0, 1), "1", variable1)
В таком случае, лямбда-выражение, которое вам нужно, это ...
(x, y, z) => { return (x == y) ? ++z : z; }
Я не уверен, чтоDelegateName
есть, но если у него есть метод Invoke (), ваше полное использование может выглядеть примерно так ...
DelegateName tally = (x, y, z) => { if (x == y) z++; };
variable1 = tally.Invoke(cellValue.ToString().Substring(0, 1), "1", variable1)