我对这种值有问题。
我使用WebServices类,无法修改,它们是这样的。。
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
(具有他的五个属性)
如果我只使用两个passsenger发送,默认情况下字符串值为空(没有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>
有人能帮我吗?
基元类型(整数等)没有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:
而不CCD_ 8。您现在可以安全地测试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