我对这种价值存在疑问。
我使用WebServices Classes并且我无法修改,它们就像这样..
Public ClientReference As String
Public Passenger1_Salutation As String
Public Passenger1_FamilyName As String
Public Passenger1_FirstName As String
Public Passenger1_PassengerType As String
Public Passenger1_PassengerAge As Integer
Public Passenger2_Salutation As String
Public Passenger2_FamilyName As String
Public Passenger2_FirstName As String
Public Passenger2_PassengerType As String
Public Passenger2_PassengerAge As Integer
直到Passenger12
(带有他的五个属性)
如果我只使用两个派对发送,默认情况下字符串值为空(没有xml标签)但是如果没有值则为整数值,打印0,这对我来说是一个值。如果是空或0,我不希望值不创建任何标记。
我的班级创建了这个..
<ClientReference>9124983</ClientReference>
<Passenger1_Salutation>MR/S</Passenger1_Salutation>
<Passenger1_FamilyName>TestAp11</Passenger1_FamilyName>
<Passenger1_FirstName>Test11</Passenger1_FirstName>
<Passenger1_PassengerType>AD</Passenger1_PassengerType>
<Passenger1_PassengerAge>30</Passenger1_PassengerAge>
<Passenger2_Salutation>MR/S</Passenger2_Salutation>
<Passenger2_FamilyName>TestAp12</Passenger2_FamilyName>
<Passenger2_FirstName>Test12</Passenger2_FirstName>
<Passenger2_PassengerType>CH</Passenger2_PassengerType>
<Passenger2_PassengerAge>10</Passenger2_PassengerAge>
<Passenger3_PassengerAge>0</Passenger3_PassengerAge>
<Passenger4_PassengerAge>0</Passenger4_PassengerAge>
<Passenger5_PassengerAge>0</Passenger5_PassengerAge>
<Passenger6_PassengerAge>0</Passenger6_PassengerAge>
<Passenger7_PassengerAge>0</Passenger7_PassengerAge>
<Passenger8_PassengerAge>0</Passenger8_PassengerAge>
<Passenger9_PassengerAge>0</Passenger9_PassengerAge>
<Passenger10_PassengerAge>0</Passenger10_PassengerAge>
<Passenger11_PassengerAge>0</Passenger11_PassengerAge>
<Passenger12_PassengerAge>0</Passenger12_PassengerAge>
但是我需要知道如何才能将xml的整数属性实例化为这样(不修改类,我可以把这个属性作为字符串,但不能修改它)
<ClientReference>9124983</ClientReference>
<Passenger1_Salutation>MR/S</Passenger1_Salutation>
<Passenger1_FamilyName>TestAp11</Passenger1_FamilyName>
<Passenger1_FirstName>Test11</Passenger1_FirstName>
<Passenger1_PassengerType>AD</Passenger1_PassengerType>
<Passenger1_PassengerAge>30</Passenger1_PassengerAge>
<Passenger2_Salutation>MR/S</Passenger2_Salutation>
<Passenger2_FamilyName>TestAp12</Passenger2_FamilyName>
<Passenger2_FirstName>Test12</Passenger2_FirstName>
<Passenger2_PassengerType>CH</Passenger2_PassengerType>
有人可以帮助我吗?
答案 0 :(得分:0)
原始类型(整数等)没有null
(Nothing
)值 - 未分配的整数为0
。但是,VB.NET提供Nullable Types
,它允许原语为Nothing
。创建它们很简单 - 只需在变量声明的末尾添加?
:
Public Passenger1_Salutation As String
Public Passenger1_FamilyName As String
Public Passenger1_FirstName As String
Public Passenger1_PassengerType As String
Public Passenger1_PassengerAge As Integer?
此时,在分配值之前,输出为:
Console.WriteLine("Passenger1_PassengerAge: " & Passenger1_PassengerAge)
将是:
Passenger1_PassengerAge:
和不 Passenger1_PassengerAge: 0
。您现在可以安全地测试Passenger1_PassengerAge Is Nothing
。
如果您使用普通整数尝试此操作:
Dim i As Integer
i += 5
Console.Write(i)
输出为5
。 i
初始化为0
,然后添加5
- 显然,0 + 5 = 5
但是,请注意Integer?
:
Dim i As Integer?
i += 5
Console.Write(i)
输出什么都没有!根据编译器的配置方式,它将不输出任何内容或无法编译并出现错误。这是因为初始化时,i
初始化为Nothing
,不 0
:Nothing + 5 = Nothing
。
如果你希望这个工作,那么在尝试使用它之前,你必须先明确说明i = 0
。
使用普通Integer
,您可以声明它并立即获取其类型:
Dim i As Integer
Console.Write(i.GetType())
将输出System.Int32
(这是在{32}计算机上内部表示Integer
的方式)。没问题。但是,使用Integer?
尝试相同的问题时会出现更大的问题:
Dim i As Integer?
Console.Write(i.GetType())
崩溃!您的程序会抛出NullReferenceException
并死亡。如果我在这里错了,有人可以编辑我,但我相信这是因为Integer?
在内部表示为一个对象而不是一个原语 - GetType()
试图获取一个对象的类型还没有存在,所以它崩溃了。
除此之外,Nullable Types
将解决您遇到的问题。
我应该指出,无论如何,你的班级设计似乎效率很低。考虑编写一个Passenger
类或结构,并将上面的代码完全替换为包含Passenger
s集合的类:
Structure Passenger
Public Passenger_Salutation As String
Public Passenger_FamilyName As String
Public Passenger_FirstName As String
Public Passenger_PassengerType As String
Public Passenger_PassengerAge As Integer?
End Structure
Class MyClass
Public Passengers() As Passenger
'etc
End Class