在Settings.settings中允许使用Nullable int类型?

Don*_*Don 25 c#

我有一个属性,我想int?在我的Settings.settings文件中键入.当我使用时,int?我得到运行时故障:

System.NullReferenceException:对象引用未设置为对象的实例..

我可以使用字符串类型作为解决方法,其中检查null工作,但我必须解析字符串并在解析不起作用时处理错误.

能够将值设置为null允许我将属性保存在设置文件中,同时明显没有设置任何值.未设置时,我使用编程的默认值:

int? configuredNumberOfLimits = Settings.Default.RequiredNumberOfLimits;
if ( configuredNumberOfLimits == null  )
{
    requiredNumberOfLimits = DEFAULT_REQUIRED_NUMBER_LIMITS;
}
Run Code Online (Sandbox Code Playgroud)

Jen*_*Ari 57

有一种方法可以使用可空类型(即int?)进行设置 - 它需要对设置文件进行一些手动编辑,但之后在VS环境和代码中工作正常.并且不需要额外的功能或包装.

要执行此操作,请创建具有所需名称的设置(例如RequiredNumberOfLimit)并使其成为任何类型(例如,int为方便起见).保存更改.

现在转到项目文件夹并使用文本编辑器打开"Properties\Settings.settings"文件(例如,记事本)或者您可以通过右键单击解决方案资源管理器中的"<您的项目> - >属性 - 在VS中打开它". > Settings.settings",选择"打开方式...",然后选择"XML编辑器"或"源代码(文本)编辑器".在打开的xml设置中找到您的设置(它将如下所示):

<Setting Name="RequiredNumberOfLimit" Type="System.Int32" Scope="User">
  <Value Profile="(Default)">0</Value>
</Setting>
Run Code Online (Sandbox Code Playgroud)

将"类型"参数更改System.Int32System.Nullable<System.Int32>.并且还清除默认值(因此默认情况下可以使用null).现在这个部分应该是这样的(请注意,&lt;并且&gt;用于表示类型字符串中的符号<>符号 - 这是为了正确解析VS的xml):

<Setting Name="RequiredNumberOfLimit" Type="System.Nullable&lt;System.Int32&gt;" Scope="User">
  <Value Profile="(Default)" />
</Setting>
Run Code Online (Sandbox Code Playgroud)

现在保存更改并重新打开项目设置 - 瞧!- 我们设置RequiredNumberOfLimit,其类型System.Nullable<System.Int32>由VS Settings Designer正确解析,并且可以int?在代码中用作普通变量.

如果您希望此设置能够返回null,则应保持默认值字段清除.否则,如果之前已将其指定为null,则此设置将返回默认值(但这就是默认值的工作原理,不是吗?:P).

  • 该方法适用于在"设置"设计器中查看设置以及在代码中设置默认值.但是,当我进行此更改时,我的设置从App.config文件中消失了.在特定情况下,这可能是也可能不重要,但我认为值得注意. (4认同)
  • VS 2019 中的设置设计器似乎对可为空类型没有任何问题,甚至将其添加到类型的下拉列表中。 (2认同)