【问题标题】:Default value for a collection using Options pattern - default value always stays there使用选项模式的集合的默认值 - 默认值始终保留在那里
【发布时间】:2021-01-05 10:38:37
【问题描述】:

我正在构建一个简单的 .NET 应用程序,并且正在使用选项模式。我的选项类很简单:

public class MyOptions 
{
   public IEnumerable<string> Data { get; set; } = new string[0];
}

如您所见,默认情况下,我只希望 Data 属性为空集合。

我注意到Data ALWAYS 始终是一个空数组,即使我实际上为此属性提供了一些非默认配置。 我还看到 Data 从我的配置中正确设置,如果我将 MyOptions 类更改为:

public class MyOptions 
{
   public IEnumerable<string> Data { get; set; }
}

为什么在提供默认值时忽略我的配置?如何保留一些默认值,但可以通过我的配置更改它?

【问题讨论】:

  • 我投票决定以“需要调试详细信息”来结束这个问题,因为我们不知道您如何设置非默认数据以及如何对其进行测试。请提供具有相同问题行为的minimal reproducible example
  • @MindSwipe 真的没关系。我正在使用 .NET 的选项模式,这意味着 MyOptions 是一个强类型类,它将在读取我的应用程序的配置时被实例化。配置可能来自多个来源。就我而言,它只是一个 JSON 文件。
  • 那么,“如果我真的更改了一些非默认配置”,您是在谈论更改最终反序列化为该对象的 JSON?
  • 你在使用new string[0]吗?这是初始化一个容量为 0 的新集合。它没有在 Data 集合或它的支持字段中添加任何项目?
  • @Loreno - 我可以发布与答案相同的内容吗?

标签: c# .net configuration


【解决方案1】:

如评论中所述,您需要将属性定义为

public class MyOptions 
{
   public IEnumerable<string> Data { get; set; } = = new List<string>();
}

代码new string[0] 仅初始化具有 0 容量的集合。

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多