2

我想将 for 循环与 switch 语句一起使用,但出现此错误:“对于每个语句不能对 int 类型的变量进行操作”

 DataRow row = MyData.Rows[0];
   int temp = Convert.ToInt32(row["Category"]);

foreach (int v in temp)
{
                switch (temp)
                {
                    case "1":
                        lblCategory.Text = temp + " - Complete.";
                        break;

                    case "2":
                        lblCategory.Text = temp + " - Not Complete";
                        break;
               }
}

好的,我正在根据您的反馈更新我的代码,但还有最后一个问题,我的数据收集中有一个名为 Category 的列,它的值如 1、2、3 等,这就是为什么我说 case “1”时的意思:

var temp = MyData.Rows;
foreach (int v in temp)
{
    switch (v.Category)
    {
    case "1":
        lblCategory.Text += v + " - Complete.\n";
        break;
    case "2":
        lblCategory.Text += v + " - Not Complete\n";
        break;
    }
}
4

4 回答 4

6

您需要有一组行来循环遍历。您为单个元素编写了一个循环。

为了使以下行起作用:

foreach (int v in temp) ...

您的temp变量必须是整数的集合(例如IEnumerable<int>orList<int>int[])。

试着写:

var temp = MyData.Rows;

代替

DataRow row = MyData.Rows[0];
int temp = Convert.ToInt32(row["Category"]);

在你的foreach循环之前,像这样:

var temp = MyData.Rows;
foreach (int v in temp)
{
    switch (v)
    {
    case 1:
        lblCategory.Text += v + " - Complete.\n";
        break;
    case 2:
        lblCategory.Text += v + " - Not Complete\n";
        break;
    }
}
于 2013-10-27T15:47:22.123 回答
1

foreach, in (C# Reference)

foreach 语句为实现 System.Collections.IEnumerable 或 System.Collections.Generic.IEnumerable 接口的数组或对象集合中的每个元素重复一组嵌入语句。foreach 语句用于遍历集合以获取您想要的信息。

但是在你的代码temp中是一个intInt32没有实现IEnumerable或者IEnumerable<T>它根本不是一个集合,所以..

于 2013-10-27T15:50:49.253 回答
1

您可以使用:

foreach (DataRow row in MyData.Rows)
{
    int v = Convert.ToInt32(row["Category"]);
    switch (v)
    {
    case 1:
        lblCategory.Text += v + " - Complete.\n";
        break;
    case 2:
        lblCategory.Text += v + " - Not Complete\n";
        break;
    }
}

在您的代码示例中,您正在迭代集合中的项目,但打开集合本身。此外,您正在将一个项目转换为一个Int32但在 case 语句中使用字符串。

于 2013-10-27T16:12:58.903 回答
0

switch(v) 而不是 temp....

您的临时变量也必须是 int 的集合

DataRow row = MyData.Rows[0];
 int temp = Convert.ToInt32(row["Category"]);

foreach (int v in temp)
{
            switch (v)
            {
                case 1:
                    lblCategory.Text = temp + " - Complete.";
                    break;

                case 2:
                    lblCategory.Text = temp + " - Not Complete";
                    break;
           }
}
于 2013-10-27T15:46:44.847 回答