为什么下面的代码编译没有错误?

Why does the following code compile without errors?

我正在处理我的 C# 项目,我很惊讶地看到这段代码可以编译:

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 和 C# 6。)


编辑: 刚切换到 .NET 上的 Roslyn 编译器 Fiddle,它仍然发出相同的错误。

这听起来像是 VS2015 中的编译器错误。这被归档为 https://github.com/dotnet/roslyn/issues/6646

我认为第一个Action

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

ref为完整动作参考b=>b = "hello"

而在第二个

Action a = ref b => b = "hello";

ref 是参考 b => b = "hello"

b 的参考

检查以下内容 fiddle