2014-05-25 5 views
0

하나의 구조 내부에서 구조의 속성을 반복하려고합니다. 그것은 다음과 같습니다가 그 객체를 사용 않으면 내가하고 싶은 무엇구조 내의 구조를 어떻게 반복합니까? (VB.NET)

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

VB인가요? 언어에 태그를 지정하면 더 유용한 응답을 얻을 수 있습니다. –

+1

하나의 구조체 (또는 심지어 클래스)와 다른 속성 값을 가진 다중 인스턴스가 필요한 것처럼 보입니까? – CodeCaster

+0

그래, 그걸 이루려고했는데 구조를 사용하는 것이 가장 쉬운 방법이라고 생각했습니다. 더 좋은 방법이 있습니까? – IamACatBug

답변

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의 객체를 포함하고 키와 이름 속성을 사용, 그래서 그들은 원래의 코드가 루프에서 할 노력했다 것 같다 이는, 고유해야합니다. 사용에 다시 ziggy에서 효율적으로 활용하려면 다음 작업을

Dim tmpThing As myThing 
If colThings.ContainsKey("ziggy") Then 
     tmpThing = colThings("ziggy") 
End If 

코드를 읽을 수 및 관리가 용이 ​​컬렉션 만들기 등 .ContainsKey 등의 컬렉션에 많은 유용한 방법이 있습니다. 사물이 유사하지만 동일하지 않은 경우 상속을 조사 할 수 있습니다. 상속은 기본 클래스에서 비슷한 유형이 정의되어 있습니다.

+0

완벽하게 작동합니다! 고맙습니다! – IamACatBug

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