我在.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>
有几点:
那么,任何人都可以提出更好的解决方法吗?