在Settings.settings中允许使用Nullable int类型?
我有一个我想输入int?
的属性int?
在我的Settings.settings文件中。 当我使用int?
我遇到运行时故障:
System.NullReferenceException:对象引用未设置为对象的实例..
我可以使用字符串类型作为解决方法,其中检查null工作,但我必须解析字符串并在解析不起作用时处理错误。
能够将值设置为null允许我将属性保存在设置文件中,同时明显没有设置任何值。 未设置时,我使用编程的默认值:
int? configuredNumberOfLimits = Settings.Default.RequiredNumberOfLimits; if ( configuredNumberOfLimits == null ) { requiredNumberOfLimits = DEFAULT_REQUIRED_NUMBER_LIMITS; }
我认为你最好的选择是成为一个老式的bool
/ int
组合。 它不是最漂亮的解决方案,但它与int?
无法真正区别开来int?
。
int configuredNumberOfLimits; if (Settings.Default.HasRequiredNumberOfLimits) { configuredNumberOfLimits = Settings.Default.RequiredNumberOfLimits; } else { configuredNumberOfLimits = DEFAULT_REQUIRED_NUMBER_LIMITS; }
有一种方法可以使用nullable类型(即int?
)进行设置 – 它需要对设置文件进行一些手动编辑,但之后在VS环境和代码中都可以正常工作。 并且不需要额外的function或包装。
为此,请创建具有所需名称的设置(例如, RequiredNumberOfLimit )并使其成为任何类型(例如,为方便起见,使用标准int
)。 保存更改。
现在转到项目文件夹并使用文本编辑器打开“Properties \ Settings.settings”文件(例如,记事本)或者您可以通过右键单击解决方案资源管理器中的“<您的项目> – >属性 – 在VS中打开它”。 > Settings.settings“,选择”打开方式…“,然后选择”XML编辑器“或”源代码(文本)编辑器“。 在打开的xml设置中找到您的设置(它将如下所示):
0
将System.Int32
的“Type”参数更改为System.Nullable
。 并且还清除默认值(因此默认情况下可以使用null)。 现在这个部分应该是这样的(注意<
和>
用于表示类型字符串中的<
和>
符号 - 这是为了正确解析VS的xml):
现在保存更改并重新打开项目设置 - 瞧! - 我们的设置RequiredNumberOfLimit的类型为System.Nullable
,它由VS Settings Designer正确解析,并且它可以用作普通的int?
代码中的变量。
如果您希望此设置能够返回null
,则应保持默认值字段清除。 否则,如果先前已将此值设置为null,则此设置将返回默认值(但这就是默认值的工作原理,不是吗?:P)。
关于什么:
int configuredNumberOfLimits if(!int.TryParse(Settings.Default.RequiredNumberOfLimits, out configuredNumberOfLimits)) { configuredNumberOfLimits = DEFAULT_REQUIRED_NUMBER_LIMITS; }
这样您就可以检查该值,如果失败则设置默认值。 不用担心字符串或解析或未处理的exception。
您可以在Settings.Designer.cs中手动设置类型
例如:
public decimal? Test{ get { return ((decimal?)(this["Test"])); } set { this["Test"] = value; } }