gpt4 book ai didi

c# - 为什么即使 IsRequired 为真,ConfigurationValidator 也会验证 ConfigurationProperty 的默认值?

转载 作者:可可西里 更新时间:2023-11-01 08:25:19 27 4
gpt4 key购买 nike

假设我有一个如下所示的配置属性。请注意,没有默认值。

[ConfigurationProperty("x", IsRequired = true)]
[StringValidator(MinLength = 1)]
public string X
{
get { return (string)this["x"]; }
set { this["x"] = value; }
}

现在我像这样添加我的部分:

<mySection x="123" />

我会得到这个错误:

The value for the property 'x' is not valid. The error is: The string must be at least 1 characters long.

如果我更改配置属性以包含如下默认值,它会起作用:

[ConfigurationProperty("x", DefaultValue="abc", IsRequired = true)]
[StringValidator(MinLength = 1)]
public string X
{
get { return (string)this["x"]; }
set { this["x"] = value; }
}

这意味着即使 IsRequired 为真,验证器也会验证默认值。这也意味着我必须在我的所有属性上包含一个虚拟默认值才能通过验证,即使它们实际上不会被使用也是如此。

这只是糟糕的设计还是这种行为有正当理由?

最佳答案

我以前遇到过这个问题。这是有正当理由的,但我不记得细节了。

我不记得这是否可行,但您可以尝试在构造函数中声明该属性,其中 null 是默认值。

public class CustomConfigurationSection : ConfigurationSection
{
public CustomConfigurationSection()
{
Properties.Add(new ConfigurationProperty(
"x",
typeof(string),
null,
null,
new StringValidator(1),
ConfigurationPropertyOptions.IsRequired));
}


public string X
{
get { return (string)this["x"]; }
set { this["x"] = value; }
}
}

这与使用默认值和验证器有关,但这是需要默认值的地方。 http://msdn.microsoft.com/en-us/library/system.configuration.configurationproperty(VS.85).aspx#1

编辑

我刚刚尝试了之前的代码,它的表现符合我的预期。我以前的代码没有编译,因为我错过了一个构造函数属性,所以我已经修复了它。

关于c# - 为什么即使 IsRequired 为真,ConfigurationValidator 也会验证 ConfigurationProperty 的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744953/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com