Проблема с использованием оператора switch case [closed]

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

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

Когда я его строю, я получаю ошибку Object reference not set to an instance of an object.
ошибка появляется в операторе switch

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

 V4Vendetta15 июн. 2012 г., 10:52
Вы даже пытались найти хотя бы MSDN для случая коммутатора?
 Sanja Melnichuk15 июн. 2012 г., 10:51
Привет. Вы должны передать элемент массива, но не весь массив.
 Francesco Baruchelli15 июн. 2012 г., 11:04
И комментарии в случаях совпадают со значениями в ячейках Excel вthis вопрос поHarish Kumar...

Ответы на вопрос(4)

и в соответствии с ним должны быть определены случаи.

Пример:

     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 '/':
         ...
     }

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

Решение Вопроса

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

You can't and wouldn't perform a switch on an array of values; switch operates on a single value. You can use foreach to flatten the array, iterate over each value, and apply the switch, however... As the error indicates, object cannot be used in switch statements, only types those indicated in the error message. If each value is an integer, cast the value to an int in the switch.

Update Хорошо, теперь они снова строки.

Пример:

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;
    }
}
 Harish Kumar15 июн. 2012 г., 11:49
мой содержит только символы, такие как слова ... так?
 Harish Kumar15 июн. 2012 г., 12:05
Привет ... я сделал то, что ты предложил ... но я получаю эту ошибку "Невозможно привести объект типа" System.Double & apos; набрать «System.String». & quot; Ошибка приходит в заявлении переключателя .. любое исправить, пожалуйста?
 Harish Kumar15 июн. 2012 г., 11:04
Можете ли вы помочь мне относительно того, как v может пройти через каждое измерение и применить d переключатель?
 15 июн. 2012 г., 12:06
ОК, поэтому стоимость каждого элементаDouble, Примените к этому вместо этого.
 15 июн. 2012 г., 11:51
Просто приведите к тому, что есть на самом деле. & quot; символы, подобные словам & quot ;; так что бросилиstring вместоint и изменить дела на"1" вместо1 (или какими-либо фактическими значениями, которые вас интересуют).

switch, В вашем случае это массив, поэтому, очевидно, нет (как говорится в сообщении об ошибке)a bool, char, string, integral, enum, or corresponding nullable type.

Ваш ответ на вопрос