将结构转换为字符串

时间:2014-01-03 12:16:54

标签: vb.net

我已经定义了这样的公共结构:

Public Structure myList
    Dim a As String
    Dim b As Integer
    Dim c As Double
End Structure

稍后在代码中我将值赋给它的实例:

    Dim myInstance As New myList
    myInstance.a = "Nemo"
    myInstance.b = 10
    myInstance.c = 3.14

然后我可以将这些值转换为字符串(用于存储到数据库),如下所示:

    Dim newString As String = ""
    Dim i As Integer
    Dim myType As Type = GetType(myList)
    Dim myField As System.Reflection.FieldInfo() = myType.GetFields()
    For i = 0 To myField.Length - 1
        newString &= myField(i).GetValue(myInstance) & " "
    Next i

string" newString"包含每个字段的值。 所有这些都可以。

现在我想为程序中的几种不同结构进行转换,但我不能(不知道如何)将某些结构和实例传递给函数。

我的尝试:

Public Function StructToString(ByVal myStruct As System.Type) As String

    Dim structString As String = ""
    Dim i As Integer
    Dim myType As Type = GetType(myStruct)
    Dim myField As FieldInfo() = myType.GetFields()
    For i = 0 To myField.Length - 1
        newString &= myField(i).GetValue(Nothing) & " " 
    Next i

    Return structString
End Function

但由于结构无法转换为类型,因此无法正常工作。

是否有可能将各种结构转换为字符串(可以放置到某些公共模块)以及如何正确地执行此操作?

1 个答案:

答案 0 :(得分:4)

只需将要转换的实例传递给Object字符串,然后使用GetType()实例方法获取实例的Type

Public Function StructToString(obj As Object) As String

    Dim structString As String = ""
    Dim i As Integer
    Dim myType As Type = obj.GetType()
    Dim myField As FieldInfo() = myType.GetFields()
    For i = 0 To myField.Length - 1
        structString += myField(i).GetValue(obj) & " " 
    Next i

    Return structString
End Function

请注意,您的字符串将以空格结尾,因此您可能应该使用String.Join进行字符串连接。这是你的函数写成一行:

Public Function StructToString(obj As Object) As String
    Return String.Join(" ", obj.GetType().GetFields().Select(Function(field) field.GetValue(obj)))
End Function

请注意,如果任何字符串字段包含空格,那么在这样的数据库中存储东西的系统将会中断。为什么不创建一个正确的数据库模式或使用序列化?或者至少使用另一个分隔符而不是空格。

此外,您是否有任何特定理由使用public mutable fields结构?如果没有,你应该使用类和属性而不是结构和字段。