5

だから、私はINIファイルから読み取るこの関数を持っています:

private void GetRigInfo()
{
    RigInfo = new string[9];
    var fileLocation = new string[2];

    // The problem is that there's no telling where the hddrigsite.ini will be 
    stored.  So, we have to find out where it is from the hddconfig.ini.
    Log("Locating rig info");

    // There's no telling if this will be on a 32 or 64 bit OS.  Check for both
    var rigInfoLocation = File.ReadAllLines(Environment.Is64BitOperatingSystem ?
                          @"C:\Program Files (x86)\HDD DrillView\hddconfig.ini" : 
                          @"C:\Program Files\HDD DrillView\hddconfig.ini");

    // This should get us the location of the rigsite info we need.
    foreach (var s in rigInfoLocation.Where(s => s.Contains("data_dir")))
    {
        fileLocation = s.Split('=');
    }

    RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");

    Log("Rig info found");
}

ここで、ステップスルーLog()して関数の最後に到達し、カーソルを合わせるとRigInfo、VisualStudioインテリセンスが表示しますRigInfo{string[30]}。今、私はそれ= new string[9]が9要素の配列を作成することを常に理解しています。では、なぜ30個の要素を持つことが許可されているのでしょうか。プログラムを実行すると、この配列に関してエラーなどは発生しません。実際のところ、それは私が物事の全体的なスキームで必要とするように機能します。これがどのように、そしてなぜそうなっているのかを理解するのに役立つすべての助けに感謝します。視覚的な補助のためにスクリーンショットも添付しました。

紛らわしいインテリセンス

4

7 に答える 7

5

ここ :

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");

変数に新しい値を割り当てています。この場合、新しい文字列[]です。

于 2012-11-07T20:36:05.590 に答える
4

この行の変数に格納されている参照を変更したため:

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");
于 2012-11-07T20:36:07.537 に答える
3

あなたがしたことは、完全に新しい配列で9要素配列を上書きしたことです。

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");
于 2012-11-07T20:36:38.303 に答える
2

配列は、ReadAllLines呼び出しによって「再定義」されます。各行をインデックスで配列に割り当てた場合、エラーが発生しますが、この場合、配列に割り当てられたメモリからポインタをリダイレクトし、ReadAllLinesメソッドの出力をポイントしました。

配列参照自体が変更されるため、常にArr=somthingにうんざりしてください。

于 2012-11-07T20:37:21.653 に答える
1

それに割り当てるFile.ReadAllLinesと、新しいメモリが割り当てられ、配列はまったく新しい配列になります。基本的に、以前の割り当てを上書きします。

于 2012-11-07T20:36:53.807 に答える
1

RigInfoには、次の行が原因で予想される9つを超える要素が含まれています。

RigInfo = File.ReadAllLines(fileLocation [1] + "\ hddrigsite.ini");

元のRigInfoを破棄し、File.ReadAllLines(fileLocation [1] + "\ hddrigsite.ini")の結果を使用して新しい文字列配列を作成します

于 2012-11-07T20:40:46.743 に答える
0

によって、サイズの結果を変数にRigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");割り当てます。new arrayFile.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");30RigInfo

もし、するなら

  RigInfo [indx++] = one line at a time

以前に定義した配列を使用しているため、9番目の要素の後で失敗します。

于 2012-11-07T20:36:36.420 に答える