【问题标题】:using forloop in switch statement using c#在使用 c# 的 switch 语句中使用 for 循环
【发布时间】:2013-10-27 15:43:23
【问题描述】:

我想在 switch 语句中使用 for 循环,但出现此错误:“for each statement cannot operation on variable of type 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;
    }
}

【问题讨论】:

  • 您认为foreach (int v in temp) 是什么意思? temp 不是列表。你一定有别的意思。

标签: c# foreach switch-statement


【解决方案1】:

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

为了使以下行起作用:

foreach (int v in temp) ...

您的temp 变量必须是整数集合(例如IEnumerable<int>List<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;
    }
}

【讨论】:

  • 谢谢,但是我将如何访问 Category 列,因为那是具有类别编号的列,例如 1、2 等。我想我可以说:switch (v.Category) { case "1 ": lblCategory.Text += v + " - 完成。\n";
  • Igor Sevo,请看我最初的帖子,我刚刚根据您的代码更新了代码
【解决方案2】:

你可以使用:

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 语句中使用字符串。

【讨论】:

  • 谢谢,请看我最初的帖子,我刚刚更新了代码,缺少一点东西
  • @moe Category 不是 v 的属性。我认为我上面的代码会为您完成这项工作,例如:Convert.ToInt32(row["Category"]) 检索类别。
  • @moe 我的代码有一个问题,没有正确定义v,现在已经更新了。
  • 新浪,我没有看到你在更新代码中定义 v 的位置,我收到错误消息,它说 v 不存在
【解决方案3】:

来自foreach, in (C# Reference)

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

但是在您的代码中tempintInt32 没有实现IEnumerableIEnumerable<T>,它根本不是一个集合,所以..

【讨论】:

    【解决方案4】:

    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;
               }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 2014-12-27
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多