【问题标题】:Why [Enum].Parse has an ignoreCase parameter?为什么 [Enum].Parse 有一个 ignoreCase 参数?
【发布时间】:2013-10-21 08:38:17
【问题描述】:

由于 VB.Net 中的枚举不能包含这样的重复值:

Enum Test
  A
  a
End Enum

那为什么[Enum].Parse方法有StringCase参数呢?

[Enum].Parse(GetType(Enum), Value, Ignorecase)

http://msdn.microsoft.com/en-us/library/system.enum.parse.aspx

解析(类型、字符串、布尔值)

这对我来说真的很有意义。

.NET 框架类的逻辑开发人员在该方法中编写了忽略大小写标志?

我认为[Enum].Parse 逻辑应该是自动检查忽略大小写的值,而不是向方法传递布尔参数,因为枚举不能包含重复项......或者它可以包含?

【问题讨论】:

  • 有些人真的需要冷静下来。对于了解 VB.Net 并且对 .NET 框架的某个方面感到困惑的人来说,这是一个完全合理的问题。
  • @David Amo 你是对的,谢谢你的理解。

标签: c# .net vb.net .net-4.0 enums


【解决方案1】:

枚举可以包含仅在大小写不同的值 - 你只是不能在 VB 中声明它们。这是完全有效的 C#:

public enum Foo
{
    A, a;
}

此外,即使枚举 不能 包含仅区分大小写的值,这也不意味着您总是希望它区分大小写或总是希望它不区分大小写。对于您试图提供区分大小写匹配的情况,您建议它应该始终不区分大小写会很烦人。将不区分大小写的匹配作为 API(IMO)中的唯一选项很少是一个好主意。

【讨论】:

  • 哦,但是如果我理解得很好,VB.NET 中的枚举不能包含Aa,对吧?
  • 事实上,Paypal API Web 服务就是这样做的——它提供了一个带有布尔参数的 WSDL,该参数可以是 Yy,它在 .NET 端生成一个带有值 @ 的枚举987654326@ 和 y,即使您使用 VB.NET,也会发生这种情况 - 您会生成无效代码。您必须手动修改生成的文件以删除多余的Y,然后确保您不刷新您的 Web 服务引用,否则y 将返回并破坏您的构建。我被这逗乐了。
  • @ElektroStudios:VB 中declared 的枚举可能无法包含它,但这并不意味着VB 不能consume 这样一个枚举。
  • 我有一个简短的问题,如果有人可以在这里回答我,内部框架枚举可能包含“重复名称”?还是只有“第 3 方”枚举?我的意思是如果使用框架 Enums 的 IgnoreCase 参数存在误报的风险。
  • @ElektroStudios:没有什么可以阻止内部框架包含仅因大小写而异的值。我怀疑他们中的任何一个都这样做,但这是可行的。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多