Извините, перетащите такой старый пост, но я только что столкнулся с тем же, и это было единственное обсуждение этой проблемы, которое я смог найти.
У меня есть догадка относительно того, что происходит.[Conditional]
обрезает вызов ConditionalMethod()
, а также любых выражений, которые действуют как параметры, передаваемые ему (согласно документации и другой ветке, связанной выше).
Я предполагаю, что неявный параметр this
обрабатывается точно так же.В строке x.DoSideEffects().DoMoreSideEffects().ConditionalMethod();
выражение, которое передается как this
, равно x.DoSideEffects().DoMoreSideEffects()
, которое должным образом удаляется, устраняя побочные эффекты.
Если мы переписываем в псевдокод, где мы явно передаем this
какПервый параметр для каждого метода становится намного понятнее:
ConditionalMethod( DoMoreSideEffects( DoSideEffects( x )));