-2

私の目標: ユーザーは「改行で区切られたアプライアンス名」のリストを選択します。このコードは問題なく動作しています。リストをループして「アプライアンス」タイプの新しいリストに入力しようとすると、問題が発生します

class Appliance{
  public string name;
  public string Firmware;
  public stirng cpu_10sec;
  public string mem;
}

そして、ここに「DatapowerList」を構築しようとするコードがあります

string f = txt_ListofAppliances.Text;
List<Appliance> DatapowerList = new List<Appliance>();

using (StreamReader sr = new StreamReader(f))
{
  Appliance Datapower;
  While ((Datapower.name = sr.ReadLine()) != null)
  {
     DatapowerList.Add(Datapower);
  }
 }

「割り当てられていないローカル変数 'Datapower' の使用」というエラーが表示されます

これが初心者の質問である場合はお詫び申し上げます。さらに情報が必要な場合はお知らせください。

4

3 に答える 3

0

のインスタンスを作成する必要がありますAppliance

変化する

Appliance Datapower;

Appliance Datapower = new Appliance();

コードを次のように単純化できます

string temp = default(string);
While ((temp = sr.ReadLine()) != null)
{
  DatapowerList.Add(new Appliance {name=temp});
}
于 2012-12-30T20:11:12.610 に答える
0

もう 1 つのオプションは、File.ReadLinesを使用することです。

foreach (var s in File.ReadLines(f))
{
    DatapowerList.Add(new Appliance { name = s });
}
于 2012-12-30T20:34:33.240 に答える
-1

自由に使えるオプションがいくつかあります。提供した例では、アプライアンスのインスタンスを作成してから、次Datapowerのフィールドの1つに値を割り当てる必要があります。

using (StreamReader sr = new StreamReader(f))
{
    Appliance Datapower = new Appliance(); //Notice the "= new Appliance()" on this line.
    while ((Datapower.name = sr.ReadLine()) != null)
    {
        DatapowerList.Add(Datapower);
    }
}

私の個人的な好みとして、while / if/etc内で値を割り当てるのは嫌いです。ステートメント。私にとっては、コードから読みやすさの小さな層を取り除きます。代わりに、次のようなことをします。

using (StreamReader sr = new StreamReader(f))
{
    while (true)
    {
        string s = sr.ReadLine();
        if (s != null)
        {
            //If the line that was read isn't null, add a new instance of Appliance
            // to the list. You can assign the "name" field a value when you create
            // the instance by using the following format: "new Object() { variable = value }
            DatapowerList.Add(new Appliance() { name = s });
        }
        else
            break;
    }
}
于 2012-12-30T20:14:36.433 に答える