处理VB.net中区分大小写的名称冲突

时间:2014-03-25 15:24:50

标签: c# vb.net wsdl collision case-sensitive

我在.Net(3.5)项目中使用第三方网络服务(通过"服务参考和#34导入),不幸的是,他们的智慧创造了一个包含区分大小写的名称冲突,例如

// This is the C# generated from the wsdl
public enum SIunitType {
  // snip
  l,
  Nm,
  rpm,
  m3,
  L,
  // snip
}

// Pre populate a pair of enums so that we can easily query them in VB
public class Class1 {
  public static SIunitType small_l = SIunitType.l;
  public static SIunitType big_l = SIunitType.L;
}
  ' VB method
  public class Class1 {
    Public Shared Sub Foo()
      Dim i1 As Integer = CInt(Class1.small_l) ' This gives 10
      Dim i2 As Integer = CInt(Class1.big_l) ' This gives 18
      Dim b As Boolean = (Class1.small_l = Class1.big_l) ' This is false

      Dim isBig As Boolean
      Select Case Class1.big_l
        Case SIunitType.l
          ' Never get here
          isBig = False

        Case CType([Enum].Parse(GetType(SIunitType), "L", False), SIunitType)
          ' So, parsing the case sensitive value works, is this the only way?
          isBig = True

      End Select
    End Sub

正如你所看到的,那就是" l" s。如果我们使用C#或任何其他区分大小写的语言,这很好。但是,当库被导入到VB.net项目中时,我们显然会遇到一些问题: intellisense纠正了" L"到了" l",可能是它首先定义的。 在调试时,查询库返回的枚举值表明存在差异,但是除了使用幻数(这违背了使用枚举的目的)或反射之外,没有办法测试它。 / p>

有几点:

  • 显而易见的答案是"不要使用会导致此问题的名称,但是我不会拥有该选项 - 它是第三方。
  • 让第三方改变这种情况不会发生 - 这是一项提供给欧洲各地公司的网络服务。
  • 不幸的是我在项目的一部分中使用VB.Net,所以"使用更好的语言"不是一个选择。

那么,任何人都可以提出更好的解决方法吗?

0 个答案:

没有答案