我试图遍历结构'一个结构内部的属性。它看起来像这样:
Structure ObjectTypes
Structure Object1
Shared Property Name = "Object1"
Shared Property Data = "Object1 Data"
End Structure
Structure Object2
Shared Property Name = "Object2"
Shared Property Data = "Object2 Data"
End Structure
End Structure
我想做的是遍历对象'结构中的名称,看它是否与我给它的值匹配,如果匹配,则使用该对象。
这样的事情:
For Each obj In ObjectTypes
If obj.Name = "Object2" then
'Do something with the object
End if
Next
答案 0 :(得分:2)
Dictionary
允许您按名称获取特定对象。目前尚不完全清楚这是合适的,但似乎是这样。
Public Class myThing
Public Property Name As String
Public Property Foo As String
Public Property Bar As Integer
' more code etc
End Class
Friend colThings As New Dictionary(Of String, myThing)
' add a thing to the dictionary
Dim item As New myThing
item.Name = "Ziggy"
item.Foo = "whatever"
colThings.Add(item.Name, item)
该集合现在包含一个类型为myThing的对象,并使用Name属性作为键,因此它们必须是唯一的,这似乎是原始代码在循环中尝试执行的操作。让ziggy回来使用:
Dim tmpThing As myThing
If colThings.ContainsKey("ziggy") Then
tmpThing = colThings("ziggy")
End If
有许多有用的方法,例如.ContainsKey
,以使代码可读,集合易于管理。如果事情相似但不相同,您可能需要查看继承,其中类似的类型是从基类定义的。
答案 1 :(得分:1)
您可以通过获取最上层结构的Type
并获取其嵌套类型以满足您的需求来实现此目的。
public static void Main()
{
foreach(var _nestedType in typeof(ObjectTypes).GetNestedTypes())
{
if (_nestedType.Name = "Object1")
{
// Do something
}
}
}
public struct ObjectTypes
{
public struct Object1
{
//..
}
public struct Object2
{
//..
}
}