Вы можете иметь это в методе, вам просто нужно немного выдумать, чтобы обойти тот факт, что RHS вашего выражения присваивания включает использование локальной переменной, которая точно не назначена:
Func<Node, int> fSum = null;
fSum = node => node.Info + (node.Left == null ? 0 : fSum(node.Left))
+ (node.Right == null ? 0 : fSum(node.Right));
Это решает проблему определенного назначения.Иногда это немного раздражает, и вы можете себе представить, что было бы неплохо исправить ... но могут быть некоторые интересные ситуации, когда это действительно проблема, но ее относительно сложно описать в языковых терминах.
Чтобы выразить этоДругой способ: я подозреваю, что исправление определенных правил присваивания, чтобы позволить локальной переменной быть прочитанной в лямбда-выражении только там, где это было бы безопасно (где лямбда-выражение является частью присвоения переменной и делегат не исполняется до тех пор, пока не будет выполнено назначение), что добавит больше сложности, чем сравнительно небольшое количество преимуществ.