Разница между 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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