0

私は問題があります。

これはコードです:

StreamReader lasa = new StreamReader("klubbar.txt");
while (true)
{
    string line = lasa.ReadLine();

    if (line == null)
    {
        break;
    }
    antal++;
    Console.WriteLine(line);

}
lasa.Close();  

これらのコード行により、変数をテキスト ファイルに書き込む際に問題が発生しました。

StreamWriter sparaklubb = new StreamWriter("klubbar.txt");

for (int i = 1; i <= antal; i++)
{
    sparaklubb.Write(klubbar[i].id + "\t");
    sparaklubb.Write(klubbar[i].klubbnamn + "\t");
    sparaklubb.Write(klubbar[i].vip + "\t");
    sparaklubb.Write(klubbar[i].dansgolv + "\t");
    sparaklubb.Write(klubbar[i].intrade + "\t");
    sparaklubb.Write(klubbar[i].casino + "\t");
    sparaklubb.WriteLine(klubbar[i].genre);
}
sparaklubb.Close();

このエラーが発生するため:

ここに画像の説明を入力

StreamReader コードを削除すると、すべてが機能します。

4

2 に答える 2

0

antal問題は、リーダー コードの後で 0 にリセットしていないことです。これにより、配列に挿入しているコードがklubbar、現在の値が何であれ、antalたとえば、リーダーが 5 行で読み取り、5 行で開始するようになりantalます。つまり、オブジェクトをklubbar配列の 1 ~ 4 (インデックスは 0 から開始する必要があります)。null次に、ライター コードで、 の値のメンバーを参照しようとしていますklubbar[1]。オブジェクトを配列antalに入れ始めると が 0 になるため、リーダー コードを削除すると問題が「修正」されます。klubbar私の提案はList<klubb>、配列の代わりに a を使用することです。

于 2013-03-12T10:52:49.700 に答える
0

コードをざっと見てみると、配列にデータを入力することはありません。配列内の各エンティティは null であるため、オブジェクトのフィールドにアクセスしようとすると、オブジェクト自体が null になります。

したがって、オブジェクトは例外を設定しません。

streamreader セクションのテキスト ファイルから人口を正しく実装する必要があります。

        klubb[] klubbar = new klubb[100]; //Skapa en vektor där varje element kan behålla flera olika variblar från klassen "klubb"

        //IF YOU REMOVE THIS STREAMREADERCODE WITH THE WHILE LOOP EVERYTHING WILL WORK FINE
        StreamReader lasa = new StreamReader("klubbar.txt");
        while (true)
        {
            string line = lasa.ReadLine();

            if (line == null)
            {
                break;
            }
            antal++;
            Console.WriteLine(line);
           // klubbar[antal] = line;     //ADD EACH LINE IN TEXTFILE TO AN SEPAREATE INDEX IN ARRAY klubar
        }
        lasa.Close();

各行を読み取るときに、その行を解析して Klubb オブジェクトにする必要があります。ファイルがタブで区切られているように見えるので、これは十分に単純なはずです。

1       Harrys  True    6   100 blackjack   klubbfan
2        xoY    True    6   100 blackajacka klubb
3       lounge  True    6   100 blackjacka  klubb

コメントに応じて、次のようなことができます:

klubbar[antal] = GetKlubbFromString(line); 
^ this line is to replace the line in your stream reader section

private static klubb GetKlubbFromString(string line)
    {
        string[] lineItems = line.Split('\t');

        //1       Harrys  True    6   100 blackjack   klubbfan


        return new klubb
                   {
                       id = Convert.ToInt32(lineItems[0]),
                       klubbnamn = lineItems[1],
                       vip = Convert.ToBoolean(lineItems[2]),
                       dansgolv = Convert.ToInt32(lineItems[3]),
                       intrade = Convert.ToInt32(lineItems[4]),
                       casino = lineItems[5],
                       genre = lineItems[6]
                   };
    }

私は個人的に Convert.To を例外のために使用しません。私は TryParse を好みます。また、より優れた SO メンバーが登場し、これを行うためのより良い方法を提供すると確信しています。

于 2013-03-12T10:58:40.343 に答える