-9

私のコードは次のとおりです。基本的に、私はExcelファイルを読み込んで、その内容をオブジェクト配列に保存しています。次に、switch case ステートメントを使用してさまざまな操作を行います。以下のコードを確認してください:-

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

ビルドすると、 オブジェクト参照がオブジェクトのインスタンスに設定されていないというエラーが表示されます。
エラーはswitchステートメントに表示されます

誰かがこれで私を助けることができますか?

4

4 に答える 4

6

エラー メッセージは、switch. あなたの場合、これは配列であるため、(エラー メッセージが示すように) bool、char、string、integral、enum、または対応する nullable type ではありません。

于 2012-06-15T08:51:39.563 に答える
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;
    }
}
于 2012-06-15T08:51:06.580 に答える
2

Switch は配列をサポートしていません。これは引数を 1 つ取り、それに従って Cases を定義する必要があります。

元:

     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 '/':
         ...
     }
于 2012-06-15T09:01:43.830 に答える
2

それは非常に自明です:その型 ( ) のため、 object でswitchステートメントを使用することはできません。valueArrayobject[,]

于 2012-06-15T08:51:29.753 に答える