【发布时间】:2018-05-04 07:30:58
【问题描述】:
拿下面的代码
Web.config:
<configuration>
<appSettings>
<add key="accesstoken:case1" value="00b8d5e4-a318-4f2d-bd5b-e7832861dbb6" />
</appSettings>
</configuration>
Controller.cs:
public JsonResult GetSomething(string token = "")
{
switch (token)
{
case System.Configuration.ConfigurationManager.AppSettings["accesstoken:case1"]:
...
case ...:
}
}
所以在这里我收到 case1 的错误,说需要一个常量值。我的印象是 AppSettings 是不变的。但是因为它是以这样的方式被访问的,所以我认为常量是不可能的。
但我真的很喜欢 switch/cases 而不是一堆 if/else,那么是否可以访问 AppSettings 以获得一个常量值?
【问题讨论】:
-
文件中的常量并不意味着它也是代码中的常量。代码中的常量总是有一个关键字
const。不一样。 -
@CodeNotFound 否,但如果 AppSettings 本身是常量,则不能有任何参数,因此为了通用性和清晰性,AppSettings 在代码中也应该是常量。我不能成为第一个想在开关/案例中使用 AppSettings 的人。
-
我理解你的要求,但我担心做不到。
const必须在编译时加入到代码中。在运行时从 AppSettings 读取时,您可以瞄准的大多数目标是readonly,但readonly变量也不能用作 switch case。 -
必须在编译时知道
const。appsettings中的值来自“外部”文件,因此不是常量