我正在尝试在应用程序中创建一个变量,以便在App.config文件中进行编辑。但是我得到一个错误说:无法将字符串转换为int。
代码片段:
/* This is in the .cs file */
private readonly System.Timers.Timer statusEventTimer = new();
private const int statusEventTime = ConfigurationManager.AppSettings["statusTime"];
statusEventTimer.Interval = statusEventTime;
statusEventTimer.Elapsed += StatusEventTimerElapsed;
statusEventTimer.Start();
这在App.config文件中
<configuration>
<appSettings>
<add key="statusTime" value="3000"/>
</appSettings>
</configuration>
我尝试使用ToInt32转换statusTime,但没有成功。你猜我能做些什么来让这个工作?
1条答案
按热度按时间yqkkidmi1#
这段代码有两个问题:第一个,正如其他人在评论中提到的,配置文件中的字符串可能根本不能作为int值解析-没有什么可以阻止任何部署您的软件的人使用“Banana”作为
statusTime
的值。另一个问题是C#中的常量必须在编译时已知。事实上,编译器在编译c#程序时会将任何出现的常量替换为它的值。
因此,您不能将配置中的值用于常量。
但是,您可以做的是将常量更改为静态只读字段-它几乎具有常量的所有优点,但可以在运行时获取其值,这意味着它也可以用于保存编译时未知的值。
所以,总结一下
使用
也就是说,如果您希望在配置中的
statusTime
的值不能作为int解析时抛出异常。如果您确实希望有一个默认的、硬编码的值,以便在值配置不正确的情况下使用,请像这样使用
int.TryParse
: