루프

2012-08-26 5 views
0

나는 사전을 가지고 :루프

Dictionary<string, dataValues> dataDict = new Dictionary<string, dataValues>(); 

public struct dataValues 
    { 
     public string Value1; 
     public string Value2; 
     public string Value3; 
     public string Value4; 
     public string Value5; 
     public string Value6; 
     public string Value7; 
     public string Value8; 
     public string Value9; 
     public string Value10; 
     public string Value11; 
     public string Value12; 
     public string Value13; 
     public string Value14; 
     public string Value15; 
     public string Value16; 
     public string Value17; 
     public string Value18; 
     public string Value19; 
     public string Value20; 
    } 
나는 사전 키를 지정하여 dataValues ​​구조체 내의 문자열의 모든 통해 반복 할 수 있도록하고 싶습니다

- 방법 이것이 성취 될 수 있습니까?

+6

문자열 변수 대신 '목록 '을 사용하십시오. –

+0

@Tim Schmelter 특정 순서로 특정 값을 지정/호출해야하기 때문에 목록에서 수행 할 수 없기 때문에 수행 할 수 없습니다. – user1559618

+3

배열을 사용하십시오. –

답변

2

제 의견 : 해당 문자열 변수 대신 List<String>을 사용하십시오.

@ 팀 Schmelter 나는 할당해야하기 때문에/특정 순서로 특정 값을 호출하고 난 목록

가의 인덱서를 사용 할 수 없어, 할 수 없어 수집.

Dictionary<string, List<string>> dataDict = new Dictionary<string, List<string>>(); 
// initialization ... 
String val20OfData1 = dataDict["Data1"][19]; 
0

글쎄, 당신은 용어의 각 멤버 변수를 반환 dataValues에 대한 고객 열거 쓰기, 또는 모든 필드를 검색하는 반사를 사용하여 ... 그런데 왜 단순히 왜 20를 사용되는 Dictionary<string, List<string>>

0

를 사용할 수 있습니다 구조체의 속성?

public struct dataValues 
    { 
     public List<string> Values; 
    } 

당신이 할 수있는 일 같은 :

foreach(string value in dataDict["yourKey"].Values) 
{ 
//do what ever you want with value here 
} 

또한, 당신의 구조체 만 List 경우, 직접 사용하지 않아도 만들 수 없습니다하는 List에 당신이 저장을 것이 가장 것 구조체

그래서, 그것은 다음 Dictionary<string, List<string>>

될 것입니다
foreach(string value in dataDict["yourKey"]) 
    { 
    //do what ever you want with value here 
    } 
0

나는 당신이 무엇을하려고하는지 잘 모르겠습니다. 어쨌든 구조체 내에서 별도의 문자열 변수를 사용해야하는 경우 다음과 같이 리플렉션을 사용할 수 있습니다.

 dataValues dv = dataDict["yourKey"]; 
     Type dvT = dv.GetType(); 
     FieldInfo[] fis = dvT.GetFields(); 
     foreach (FieldInfo fi in fis) 
     { 
      MessageBox.Show(fi.GetValue(dv) as string); 
     }