空整数值,不打印任何vb.net



我对这种值有问题。

我使用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>

有人能帮我吗?

基元类型(整数等)没有nullNothing)值-未分配的整数是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)

输出为5i初始化为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类或结构,并将上面的代码完全替换为一个包含Passengers:集合的类

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

相关内容

最新更新