2013-10-27 2 views
2

Я хочу использовать цикл с переключателем заявления, но получаю эту ошибку: «для каждого оператора не может работать на переменной типа Int»с помощью forloop на коммутаторе заявление с помощью C#

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

хорошо, я обновляю свой код основанный на вашей обратной связи, но есть один последний вопрос, у меня есть столбец с именем Категория в моей коллекции данных и имеет такие значения, как 1,2,3 и т.д., так что именно поэтому я имею в виду, когда я говорю случай «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; 
    } 
} 
+2

Что вы думаете: 'foreach (int v in temp)' означает? 'temp' не является списком. Вы, должно быть, имели в виду что-то еще. – usr

ответ

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.

+0

спасибо, пожалуйста, посмотрите мой первоначальный пост, я только что обновил код и пропустил одну маленькую вещь. – moe

+0

@moe 'Category' не является собственностью 'V'. Я думаю, что мой код выше выполнит эту работу для вас, например: «Convert.ToInt32 (строка [« Категория »])' получает категорию. –

+0

@moe У моего кода возникла проблема, которая не определяла 'v' правильно, теперь она обновлена. –

0

переключатель (v) вместо температуры ....

также переменная температура должна быть коллекция 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; 
      } 
} 
6

Вы должны иметь набор строк проходным. Вы написали цикл для одного элемента.

следующую строку, чтобы работать:

foreach (int v in temp) ... 

ваша temp переменная должна быть набор целых чисел (например IEnumerable<int> или List<int> или int[]).

Try записывания:

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

спасибо, но как бы получить доступ к столбцу Category, потому что это столбец с номером категории, как 1, 2 и т. Д. Я думал, что могу сказать: switch (v.Category) {case "1": lblCategory.Text + = v + "- Завершить. \ n"; – moe

+0

Igor Sevo, пожалуйста, посмотрите мой первоначальный пост, я только что обновил код на основе вашего кода – moe

1

От foreach, in (C# Reference)

The foreach statement repeats a group of embedded statements for each element in an array or an object collection that implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable interface. The foreach statement is used to iterate through the collection to get the information that you want..

Но в вашем коде temp является int, Int32 не реализует IEnumerable или IEnumerable<T> и это не коллекция вообще, так ..

Смежные вопросы