我有一个像这样的
Options
类(注意required
关键字):
public class Options
{
[Required]
public required string Endpoint { get; set; }
}
它是从这样的配置加载的:
public static IServiceCollection AddOptions(this IServiceCollection services, IConfigurationSection section)
{
var options = new Options();
section.Bind(options);
....
}
构造函数行现在让编译器抱怨:
错误 CS9035:必须在对象初始值设定项或属性构造函数中设置必需的成员“Options.Endpoint”。
因为我知道下面的
.Bind()
(与[Required]
属性和设置验证(此处未显示)结合使用)将确保Options
的所有属性都已正确设置,所以我想禁用编译器警告。
不幸的是,添加
#pragma warning disable CS9035
没有效果。
我知道,我可以像这样在构造函数中初始化所需的
Endpoint
成员,但这感觉不太好而且看起来很尴尬:
var openAIOptions = new OpenAIOptions { Endpoint = null! }
我还有哪些其他选择?
您可以在类中的构造函数中将 Endpoint 与 SetsRequiredMembers 属性一起设置为 null:
[SetsRequiredMembers]
public Options()
{
Endpoint = null!;
}
如果
Bind
使用 Get<T>
var options = section.Get<Options>()