【问题标题】:Why NameValueCollection instance initialization still compiles with extra comma? [duplicate]为什么 NameValueCollection 实例初始化仍然用额外的逗号编译? [复制]
【发布时间】:2025-12-19 09:40:11
【问题描述】:

我正在使用NameValueCollection 来存储稍后将发布到 API 服务器的值。今天我在初始化NameValueCollection 的实例时不小心添加了额外的逗号,如下面的简单代码:

NameValueCollection nvc = new NameValueCollection()
{
    ["foo"] = "bar",
    ["hello"] = "world", // <-- an extra comma here
};

请注意,world 值后面有多余的逗号。此代码在我的计算机和其他开发人员的计算机上正常编译,有或没有额外的逗号。但即使使用正确的代码,我也无法让它在.NET Fiddle 上运行。如果重要的话,我正在使用 .NET 4.6.1。

我知道初始化NameValueCollection 的不同方式就像上面的小提琴一样,但这不是问题/问题。我的问题是,为什么编译器可以编译这个损坏的代码而不发出一些警告?或者我的 Visual Studio 设置在某处不正确?或者我错过了一些编码原则?请指教。谢谢。

【问题讨论】:

  • 它是有效的 C# - 7 的东西?有“小提琴”链接吗?也许它使用的是旧的 C# 语言目标(6?早期 7?),它确实支持“赋值”语法(以及带有尾随逗号的 naught)。
  • @user2864740 我想我使用的是 C# 6,因为我电脑上安装的 .NET 是 4.6.1。该问题提供了小提琴链接,或请访问此 [dotnetfiddle.net/131Nvm](链接)。
  • 该字典初始化器可从 C#6 获得。 .Net Framework 与 C# 版本无关。附加到最后一个元素的逗号将被忽略。
  • @peter-duninho,哎呀,我没有找到问题。谢谢你指点我。

标签: c# namevaluecollection


【解决方案1】:
  1. 这并非特定于 NameValueCollection,所有集合类型以及 Enums 都允许这样做。
  2. 这与 .NET Framework 版本无关。这是 C# 编译器功能。
  3. 这让程序员的生活更轻松。如果您有机会使用 PHP/JS 工作,这感觉就像是一个受欢迎的小功能。
  4. 您可以在this excellent SO post 阅读有关它的更多详细信息。

【讨论】:

    最近更新 更多