Подтвердить что ты не робот

Почему следующий код компилируется без ошибок?

Я немного возился с моим проектом С#, и я был удивлен, увидев, что этот код компилируется:

var a = new Action<string>(ref b => b = "hello");

Перевернув его наоборот, например, Action<string> a = ref b => b = "hello"; даст синтаксическую ошибку в 'ref'.

Конечно, копирование фрагмента в http://dotnetfiddle.net дает ошибку компилятора:

A ref or out argument must be an assignable variable

Я столкнулся с ошибкой в ​​компиляторе? (Я использую VS 2015 и С# 6.)


EDIT: Просто переключившись на компилятор Roslyn на .NET Fiddle, он все равно выдает ту же ошибку.

4b9b3361

Ответ 2

Я думаю, сначала Action

var a = new Действие (ref b = > b = "hello" );

ref является ссылкой для полного действия b=>b = "hello"

а во втором

Действие a = ref b = > b = "hello" ;

ref является ссылкой для b в ref b = > b = "hello"

проверьте ниже скрипка