C# 编译器如何处理字符串插值

C# 编译器如何处理字符串插值,c#,string-interpolation,C#,String Interpolation,我使用字符串插值方法属性,如- const string User = "SomeUser"; const string Admin = "Admin"; . . . [Authorize(Roles = $"{User},{Admin}")] public IHttpActionResult Get() 但是VisualStudio给出了一个错误- 属性参数必须是常量表达式,typeof表达式 或属性参数类型的数组创建表达式 当我尝试用“+”进行字符串连接时,它是有效的 [Authorize

我使用字符串插值方法属性,如-

const string User = "SomeUser";
const string Admin = "Admin";
.
.
.
[Authorize(Roles = $"{User},{Admin}")]
public IHttpActionResult Get()
但是VisualStudio给出了一个错误-

属性参数必须是常量表达式,typeof表达式 或属性参数类型的数组创建表达式

当我尝试用“+”进行字符串连接时,它是有效的

[Authorize(Roles = User + "," + Admin)]
public IHttpActionResult Get()
即使我将
,“
替换为
”,“
也会产生相同的错误


我想知道编译器是如何处理字符串插值的?

字符串插值被转换为
string.Format
,它不是编译时常量,因为它需要
请查看以了解更多信息

字符串插值只是调用
String.Format
的语法糖,它不是
constepr
,属性参数必须是
constepr
s。C#语言回购协议中有许多关于改变这种行为的建议,以将
string.Format
转换为
constepr
,例如。