如何在结构中循环结构? (VB.NET)

时间:2014-05-25 14:42:34

标签: .net vb.net loops object structure

我试图遍历结构'一个结构内部的属性。它看起来像这样:

 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

2 个答案:

答案 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
    {
        //..
    }
}