【发布时间】:2014-01-04 15:56:36
【问题描述】:
我已经定义了这样的公共结构:
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
其中字符串“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
但这不起作用,因为结构无法转换为类型。
这里是否有可能制作这样的功能来将各种结构转换为字符串(可以放置到一些公共模块中)以及如何正确地做到这一点?
【问题讨论】:
-
为什么?使用单独的字段或使用序列化程序正确构建数据库。不要只是用空格连接值。
-
@user1937198,由于兼容性问题,这里的序列化不好用,结构的所有字段都必须保存在单个数据库字段中,无论结构元素数量如何。
-
xmlserilizer 的问题会比这个解决方案少,因为它可以处理值中的空格。它还提供 ToString 不提供的往返保证。 XML 和 JSON 也是定义的标准,可用于任何语言。
-
好的,我看看能不能用,谢谢。
标签: vb.net