Разница между Expression.Return и Expression.Goto в деревьях выражений C#C#

Место общения программистов C#
Anonymous
Разница между Expression.Return и Expression.Goto в деревьях выражений C#

Сообщение Anonymous »

Я экспериментирую с деревьями выражений C# и пытаюсь понять разницу между Expression.Return и Expression.Goto. Я не могу создать пример, в котором Return и Goto ведут себя по-разному внутри блока. Я хочу четко понимать, когда использовать одно вместо другого при создании дерева выражений.
Пример

Код: Выделить всё

[Fact]
public void Block_Return_LikeGoto()
{
var type = typeof(int);
var label1 = Expression.Label(type);
var label2 = Expression.Label(type);
var body = Expression.Block(
Expression.Return(label1, Expression.Constant(1)),
Expression.Label(label1, Expression.Constant(2)),
Expression.Label(label2, Expression.Constant(3)));

var func = Expression.Lambda(body).Compile();

Assert.Equal(3, func());
}
Здесь Return не немедленно выходит из блока; значение метки возвращается в конце блока, поэтому поведение такое же, как при использовании Goto.
  • Когда именно Return и Goto ведут себя по-разному?
  • Бывают ли случаи, когда Goto никогда не сможет заменить Return?


Подробнее здесь: https://stackoverflow.com/questions/798 ... pression-t

Вернуться в «C#»