【发布时间】:2014-05-16 02:40:22
【问题描述】:
我想检查一个类的属性是否是一个数组(这里只关心数字数组,而不是字符数组[即字符串])。然后我想遍历数组(即对每个元素“做某事”)。请参阅下面的尝试。谢谢!!
编辑:
所以,更多的信息......到目前为止,IsArray 和我显示的方法都无法检查数组。 MSDN 建议“typeof(Array).IsAssignableFrom(type)”,但我不确定如何使用此处的属性信息来实现。但也许其他人知道如何使用它们,而我只是没有正确使用。
在“Class3”中,我定义了一个数组,但没有标注它。当我在另一个线程中实例化它并在将其传递给此函数之前将其加载时,我使用“redim”。当我在此处的代码中插入断点时,我可以查看“myobject”并查看数组元素和值,但实际上我希望干净利落地使用 propertyinfo 类型来概括此方法。一旦我确定它是一个数组,我还需要能够对数组进行索引......再次使用 propertyinfo,而不是直接使用“myobject”。
Public Class Class2
Private Shared filelock As New Object
Public Shared Sub write2file(ByVal myobject As Class3)
SyncLock filelock
Dim sb As New StringBuilder
Using sw As StreamWriter = New StreamWriter(File.Open(newfilename, FileMode.Append, FileAccess.Write, FileShare.None))
'Dim pinfo() As PropertyInfo = GetType(Class3).GetProperties
Dim pinfo() As PropertyInfo = CType(myobject.GetType.GetRuntimeProperties, PropertyInfo())
sb.Clear()
For Each p As PropertyInfo In pinfo
If Not p.GetIndexParameters.Length > 0 Then 'if property is not an array
sb.Append(p.GetValue(myobject)).Append(",")
Else ' if property is an array
For x As Integer = 0 To p.GetIndexParameters.Length - 1
sb.Append(p.GetValue(myobject, New Object() {x})).Append(",") 'append each value from array to the stringbuilder in .CSV format
Next
End If
Next
sw.WriteLine(sb) 'write string to file
End Using
End SyncLock
End Sub
结束类
【问题讨论】:
-
嗯,这取决于。数组可以有字符串和数字。你想对他们中的任何一个做什么?我看到您如何检查数组的长度,这很好。当它是一个数组或两者时,你只想检查它是否是数字???
-
您可以尝试使用
IsArray()函数来检查属性是否为数组类型。IsArray()不会为 String 属性返回True(因为它被识别为 Char 数组),因为您似乎担心
标签: arrays vb.net properties indexing