我有这样的结构,我有一个数组sorular[] soru
。
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
错误,我无法做到这一点。我不想使用while
或for
循环:)
答案 0 :(得分:5)
您无法迭代不是集合或其他可迭代类型的内容。
根据您的更新,我相信您正在寻找:
foreach (sorular s in soru) {
var i = s.dogrucevap;
...
}
答案 1 :(得分:2)
为了在sorular.dogrucevap
语句中使用foreach
,它应该返回具有方法GetEnumerator
(或实现IEnumerable
接口)的对象。
为什么无法获得dogrucevap' 错误的调查员?
Foreach语句枚举集合的元素,为集合的每个元素执行嵌入语句,并将其定义为(C#Specification 8.8.4 foreach语句):
foreach (local-variable-type identifier in expression)
embedded-statement
如果foreach语句中的表达式不是数组或动态,那么它应该具有适当的GetEnumerator
方法,该方法定义为:
类型为X的成员,标识符为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
}
答案 2 :(得分:2)
我有一个阵列sorular [] soru。
由于在soru中有这些结构的数组,你可以从它们中突出以获得一组dogrucevap值。
IEnumerable<int> dogrucevaps = soru.Select(s => s.dogrucevap);
然后你可以迭代这些
foreach( int i in dogrucevaps )
{
//TODO: use i
}
以浓缩形式
foreach(int i in soru.Select(s => s.dogrucevap))
{
//TODO: use i
}
答案 3 :(得分:0)
您的值是整数 - 您不能直接迭代整数。
如果你只想要foreach
单项 - Enumerable.Repeat
单个项目进行一次迭代:
foreach(int i in Enumerable.Repeat(questions.dogrucevap,1 ))
{
}
如果你&#34; dogrucevap&#34; varialbe意味着什么&#34;从1到dogrucevap&#34;您可以在其中构建Range
并在范围内构建foreach
:
foreach(int i in Enumerable.Range(1,questions.dogrucevap))
{
}
答案 4 :(得分:0)
首先,您最好不要使用结构,而是使用类。
当您使用数组sorular[] soru
时,您可以执行以下操作:
foreach (var item in soru)
{
// do something with item.dogrucevap which is an int
}
或者,如果要迭代结构的字段,可以使用反射。