Razor 中的 .NET Core 字符串插值错误?

use*_*495 3 c# compiler-errors string-interpolation visual-studio razor

我不明白为什么在 .cshtml/Razor 页面中输入时不会编译:

@($"{"\""}") // <-- does not work

@($"{"'"}") // <-- does not work

@($"{"a"}") // <-- works
Run Code Online (Sandbox Code Playgroud)

错误指出:

RZ1000:未终止的字符串文字。以引号 (") 开头的字符串必须在行结束之前终止。但是,以 @ 和引号 (@") 开头的字符串可以跨越多行。

CS1002:;预期的

CS1513: } 预期

看来非引号字符工作正常,但双引号或单引号字符会破坏 Razor 解析内插字符串的能力,即使引号字符已转义也是如此。

所有示例在普通 .cs 文件中都可以正常工作:

public sealed class Test
{
    public string x = $"{"\""}";
    public string y = $"{"'"}";
    public string z = $"{"a"}";
}
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?

我的环境如下:

.NET SDK:v7.0.102

.NET运行时:v7.0.2

C#:v11(预览)

Visual Studio 社区 2022(64 位):v17.4.4

在此输入图像描述

use*_*495 5

这是一个错误,.NET 人员至少早在 2015 年就已经知道了。

然而,dotnet/aspnetcore github 页面上的 dotnet 工程师认为修复该问题所需的工作超过了带来的好处:

2015 年 6 月 3 日

进一步调查此问题后发现,完成此任务的要求相当高(需要在 Tokenizer 级别接近完整地了解 C#)。稍后会再回顾这一点。

10周零2天后...

2015 年 8 月 14 日

转向待办事项是因为我们认为这些情况在 MVC 视图中并不常见,并且有一些简单的解决方法(例如使用 string.Format() 而不是字符串插值)。

https://github.com/dotnet/aspnetcore/issues/4976