2012-06-15 3 views
-9

Мой код выглядит следующим образом. В принципе, я читаю файл excel и сохраняю его содержимое в массив объектов. Затем я использую оператор case switch для выполнения различных операций. Проверьте мой код ниже: -Проблема с использованием оператора case switch

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data; 
using System.Drawing; 
using System.ComponentModel; 
using Excel = Microsoft.Office.Interop.Excel; 
using Microsoft.Office.Interop.Excel; 
namespace Excel1 
{ 
    class Program 
    { 
     public static void Main(string[] args) 
     //public void ExcelOps() 
     { 
      //string str; 
      Excel.Application xlApp = new Excel.Application(); 
      Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"D:/WebServiceTemplate.xlsx"); 
      Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
      Excel.Range xlRange = xlWorksheet.UsedRange; 
      int rowCount = xlRange.Rows.Count; 
      int colCount = xlRange.Columns.Count; 
      int numSheets = xlWorkbook.Sheets.Count; 
      // 
      // Iterate through the sheets. They are indexed starting at 1. 
      // 
      for (int sheetNum = 1; sheetNum <=1; sheetNum++) 
      { 
       Worksheet sheet = (Worksheet)xlWorkbook.Sheets[sheetNum]; 
       // 
       // Take the used range of the sheet. Finally, get an object array of all 
       // of the cells in the sheet (their values). 
       // 
       object[,] valueArray = (object[,])xlRange.get_Value(XlRangeValueDataType.xlRangeValueDefault); 

       // 
       // Do something with the data in the array with a custom method. 
       //     
       ProcessInput(valueArray); 
      } 
     } 
     public static void ProcessInput(object[,] valueArray) 
     { 
      foreach (var value in valueArray) 
      { 
       switch ((string)value.ToString()) 
       { 
        case "ITemplate.GetAllTemplate": 
         { 
          //ITemplate.GetAllTemplate 
          break; 
         } 
        case "ITask.GetTaskInstanceFromTemplate": 
         { 
          //ITask.GetTaskInstanceFromTemplate 
          break; 
         } 
        case "CreateTask": 
         { 
          //CreateTask 
          break; 
         } 
        case "UpdateDatabase": 
         { 
          //UpdateDatabase 
          break; 
         } 
        case "GetTaskStatus": 
         { 
          //GetTaskStatus 
          break; 
         } 
        case "VerifyValue": 
         { 
          //VerifyValue 
         } 
         break; 
       } 
      } 
     } 
    } 
} 

Когда я построить его, я получаю ошибку ссылаться на объект не указывает на экземпляр объекта.
ошибка появляется в заявлении переключателя

Может ли кто-нибудь помочь мне с этим?

+0

Привет. Вы должны передать массив, но не весь массив. –

+0

Вы даже попробовали посмотреть хотя бы MSDN для корпуса коммутатора? – V4Vendetta

+1

И комментарии в случаях совпадают с значениями в ячейках excel в [this] (http://stackoverflow.com/questions/11044835/parsing-an-excel-file-and-reading-a-cell/11045564 # 11045564) вопрос от [Harish Kumar] (http://stackoverflow.com/users/1034945/harish-kumar) ... –

ответ

4

valueArray - многомерный массив объектов, согласно определению вашего параметра. switch не поддерживает это.

  1. Вы не можете и не будете переключаться на массив значений; switch работает с одним значением. Вы можете использовать foreach, чтобы сгладить массив, перебрать каждое значение и применить переключатель, однако ...
  2. Как показывает ошибка, object не может использоваться в операторах switch, только типы указаны в сообщении об ошибке. Если каждое значение является целым числом, введите значение в int в switch.

Обновление OK, теперь это строки снова.

Пример:

foreach(var value in valueArray) 
{ 
    switch(value as string) 
    { 
     case "ITemplate.GetAllTemplate": 
        break; 
     case "ITask.GetTaskInstanceFromTemplate": 
        break; 
     case "CreateTask": 
        break; 
     case "UpdateDatabase": 
        break; 
     case "GetTaskStatus": 
        break; 
     case "VerifyValue": 
        break; 
    } 
} 
+0

может помочь мне в том, как v может проходить через каждое измерение и применять d-переключатель? –

+0

моя содержит только символы, такие как слова ... так? –

+0

Просто введите то, что есть на самом деле. «символы как слова»; поэтому вместо строки 'int' вместо строки' int' следует преобразовать строку '' string'', а вместо '1' (или то, что вам интересно). – HackedByChinese

2

Это вполне понятно: вы не можете использовать switch заявления с valueArray объектом из-за его типа (object[,]).

6

Сообщение об ошибке относится к типу переменной в скобках после вашего switch. В вашем случае это массив, поэтому, очевидно, нет (как сказано в сообщении об ошибке) a bool, char, string, integer, enum или соответствующий тип NULL.

2

Массивы не поддерживаются коммутатором. Он принимает один аргумент, и в нем должны быть определены случаи.

Ex:

 int num=3; 
    switch(num) //in case of integer type 
     Case 1: 
     Case 2: 
     ... 
    } 


    char ch='a'; 
    switch(ch) //in case of character type 
    { 
     Case 'a': 
     Case 'b': 
     Case '/': 
     ... 
    } 
Смежные вопросы