2009-08-20 33 views
2

C#で2次元配列を宣言し、それらを取り込み、配列を返すのに問題があります。現時点でC#での2次元配列と配列の返り方

、私はそうのような配列を宣言しています:

private static string[,] _programData = new String[50,50]; 
    public string[,] ProgramData 
    { 
     get 
     { 
      return _programData; 
     } 
    } 

_programDataがエラーを示していることは '

[] []の文字列に文字列[ ]「暗黙的にタイプから変換することはできません'

私はそうのような別のクラスからはProgramDataを呼び出そうとしていますことを指摘すべきである:

for (serviceCount = 0; serviceCount <= ffm.Program.Length; serviceCount++) 
      { 
       Console.WriteLine("Program Number: " + ffm.Program[serviceCount].ToString()); 
       for (serviceDataCount = 0; serviceDataCount <= ffm.ProgramData.Length; serviceDataCount++) 
       { 
        **Console.WriteLine("\t" + ffm.ProgramData[serviceCount, serviceDataCount].ToString());** 
       } 
      } 

エラーが太字で発生します

オブジェクト参照がオブジェクトのインスタンスに設定されていません。

私は配列が宣言されているかどうか、私が理解していない型の不一致しか問題にはならないと思います。

よろしく

+0

"return _programData;"にエラーが報告されていますか? ProgramDataを呼び出す行または行?後者の場合は、2D配列の文字列連結がないと考えられます。 –

+0

私はこの行のエラーを解決しました。それは見落とされた小さな構文でした。 2次元配列の後に文字列を連結しているように見えます。 エラーが1回発生すると、別のエラーが発生します。 – Ric

+0

実際にエラーが発生していた行をハイライト表示すると、本当に役に立ちます。あなたはまた、serviceDataCountがあなたが50だけを期待している2500まで数えることにバグを持っているように見えます。多次元配列の長さは、その寸法の積です。 – AnthonyWJones

答えて

2

まず、呼び出しffm.ProgramData.Lengthは、前述のように2500(50 * 50)を返します。

第2に、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーは、配列の初期化されていない部分を参照しているために発生します。配列が空の文字列で満たされていることを確認してください(もちろん、必要に応じて変数名を変更してコンストラクタでこのループを実行する必要があります)。

for(int fDim = 0; fDim < ffm.ProgramData.GetLength(0); fDim++) 
    for(int sDim = 0; sDim < ffm.ProgramData.GetLength(1); sDim++) 
     ffm.ProgramData[fDim, sDim] = ""; 

第3に、ループ内でToString()メソッドを呼び出す必要はありません。文字列を文字列にキャストしています。

+0

これで問題は解決しました。今はエラーメッセージは表示されませんが、2次元配列にデータが入力されていないと思われます。つまり空白が表示されています – Ric

1

はProgramDataは、[] [] '

いいえ、それはいずれかを示していない文字列に文字列[*]「暗黙的にタイプから を変換することはできません' というエラー を示していますエラー。コードはちょうど良い(C#3.5で)コンパイルします。あなたは次元のサイズを返すためにffmProgramData.GetLength(1)にその数を修正する必要があるので、