2014-05-12 4 views
0

이 구조체가 있고 배열이 sorular[] soru입니다.foreach는 구조체 요소의 열거자를 가져올 수 없습니다.

public struct sorular 
{ 
    public string resim; 
    public string soru; 
    public string seceneka; 
    public string secenekb; 
    public string secenekc; 
    public string secenekd; 
    public int dogrucevap; 
    public int verilencevap; 
} 

그리고처럼 foreach 루프를 사용하고 싶습니다 :

foreach (int i in sorular.dogrucevap) 
{ 

} 

하지만 때문에 cant get enumerator of dogrucevap 오류를 할 수 없습니다. 나는 그것이 방법 GetEnumerator를 가지고 객체를 반환해야합니다 foreach 성명에서 sorular.dogrucevap를 사용하기 위해 while 또는 for 루프 :

+2

그것은 하나의 필드'공공 INT의 dogrucevap 이러한

foreach(int i in dogrucevaps) { //TODO: use i } 

을 반복 할 수있다'는'int'의 수집하지 않습니다 . 당신은 그것을 열거 할 수 없습니다. – Habib

+1

'Foreach (soru의 sorular) {int i = s.dogrucevap; }'? – Brian

+0

@Brian : IEnumerable을 구현하지 않으면 작동하지 않습니다. – JAX

답변

5

당신은 반복 할 수 없습니다 컬렉션 또는 그렇지 않으면 반복 가능한 형식이 아닌 무언가. - 직접 정수를 반복 할 수

foreach (sorular s in soru) { 
    var i = s.dogrucevap; 
    ... 
} 
+0

Thx Zachary 내가 알 필요가있는 것은 내가 구조 배열을 가지고있다. Thx : 나를 도왔던 모든 사람들에게 :) – user3629573

+0

언제든지 - 행운을 빌어 요, 행복하게 코딩! :) –

2

를 사용 (또는 IEnumerable 인터페이스를 구현)하고 싶지 않아요.

왜 당신은 을 가지고 있습니까? dogrucevap의 열거자를 얻을 수 없습니다. 오류가 있습니까?

foreach 문을 수집하고 각 요소에 포함 된 문장을 실행하는 컬렉션의 요소를 열거 그 (C# 1 규격 8.8.4 foreach는 문)로서 정의 :

foreach (local-variable-type identifier in expression) 
    embedded-statement 

경우 foreach 문에서 배열 또는 동적이 아니면

식별자 GetEnumerator 및 012 형식의 멤버에 적절한 GetEnumerator 메서드가 있어야합니다.형식 인수가 없습니다. 귀하의 경우 표현 유형 int 반환 값에

. 따라서 int에는 GetEnumerator 메서드가 없으므로 foreach 문에서 사용할 수 없습니다. int은 컬렉션으로 보이지 않으므로 실제로 이해가되지 않습니다. 정수 값 42에서 열거 할 것으로 예상되는 항목은 무엇입니까?

문제를 해결하는 방법? structs 배열에 구조체를 열거한다고 가정하십시오. 그런 다음 코드는

sorular[] soru; 
// intialize and fill array 

foreach(sorular s in soru) 
{ 
    // use s.dogrucevap 
} 

과 같아야 아니면 배열에 구조체의 dogrucevap 값을 열거하려는 경우, 당신은이 값을 선택하여 project 배열 항목 수 :

foreach(int dogrucevap in soru.Select(s => s.dogrucevap)) 
{ 
    // use dogrucevap 
} 
+1

"sorular.dogrucevap"은 foreach 루프에서 의미가 없으며 반복 유형이 아닌 정수 유형입니다. – JAX

+1

나는 편집 후 +1을 주었다. – JAX

0

귀하의 값은 정수 :

은 업데이트를 바탕으로, 여기에 내가 당신이 찾고있는 무엇을 믿는 것입니다.

그냥 단일 항목의 foreach합니다 - 하나의 반복하도록 Enumerable.Repeat 단일 항목을 : 당신이 "dogrucevap"varialbe는 "dogrucevap 1에서"뭔가를 의미하는 경우

foreach(int i in Enumerable.Repeat(questions.dogrucevap,1)) 
{ 

} 

당신이 그것의 Range을 구성 할 수 있습니다 및 범위에 foreach :

foreach(int i in Enumerable.Range(1,questions.dogrucevap)) 
{ 

} 
+0

회신을위한 thx :) – user3629573

0

첫째, 대신 구조체의 당신은 클래스를 사용하여 더 나을 것입니다.

당신은 당신이 다음을 수행 할 수있는 배열 sorular[] soru를 사용하는 것처럼 :

foreach (var item in soru) 
{ 
    // do something with item.dogrucevap which is an int 
} 

다른 방법을, 당신은 당신이 반사를 사용할 수있는 구조의 필드를 반복하십시오.

+0

일한 thx didnt는 나의 것의이 지체적인 두뇌를 생각했다 : 나는 응답을주기를위한 반영 thx를 찾을 것이다 :) – user3629573

+0

당신이 응답으로 이것을 받아 들일 수있는 경우에 도움이 될 것입니다. –

2

나는 배열을 가지고있다. [] soru.

소루에 이러한 구조체 배열이 있으므로 dogrucevap 값 집합을 얻기 위해 투영 할 수 있습니다.

IEnumerable<int> dogrucevaps = soru.Select(s => s.dogrucevap); 

그리고 당신은 압축 된 형태로

foreach(int i in soru.Select(s => s.dogrucevap)) 
{ 
    //TODO: use i  
} 
관련 문제