none
fileを enum type にload したいのですが RRS feed

  • 質問

  • お世話になります。

    現在、Windows applicationで開発中なのですが、saveしたfileをloadする時に、enumに開く時はどうしたらいいのでしょうか?私のプログラムはNBA選手を足したり、消去したり出来る物にしたいのですが下記の様な感じです。

    public void Save(string filePath)
            {
                StreamWriter sw = new StreamWriter(filePath);
                sw.WriteLine(m_Name);
                sw.WriteLine(m_City);
                sw.WriteLine(m_State);
                sw.WriteLine(Path.GetFileName(m_LogoPath));
                sw.WriteLine(m_PlayerList.Count);
                foreach (Player p in PlayerList)
                {
                    sw.WriteLine(p.First);
                    sw.WriteLine(p.Last);
                    sw.WriteLine(p.Position);
                    sw.WriteLine(p.Age);
                }
                sw.Close();
            }
            public void Load(string filePath)
            {
                StreamReader sr = new StreamReader(filePath);
                m_Name = sr.ReadLine();
                m_City = sr.ReadLine();
                m_State = sr.ReadLine();
                m_LogoPath = Path.Combine(Path.GetDirectoryName(filePath), sr.ReadLine());
                int numberOfPlayer = Convert.ToInt32(sr.ReadLine());
                PlayerList.Clear();
                for (int i = 0; i < numberOfPlayer; i++)
                {
                    Player player = new Player();
                    player.First = sr.ReadLine();
                    player.Last = sr.ReadLine();
    //TODO: Change to Enum               player.Position = sr.ReadLine();

                    player.Position = sr.ReadLine();
                    player.Age = int.Parse(sr.ReadLine());
                    AddPlayer(player);
                }
                sr.Close();
            }

    public enum Position
        {
            PointGuard,
            ShootingGuard,
            SmallForward,
            PowerForward,
            Center
        }

    このpositionの部分でenumなのですが、どの様にして、save、loadしたらいいのでしょうか。よろしくお願いいたします。

     

     

    2006年7月1日 5:32

すべての返信

  • コレくらいは入力チェックしましょうね。

     

    string data = sr.ReadLine();

    //ステータスの入力チェック
    if (data == null)
    {
        this.ErrorLabel.Text = "statusが入力されていません。";
        return;
    }
    if (data == "")
    {
        this.ErrorLabel.Text = "statusが入力されていません。";
        return;
    }
    //いったんenumに変換してみる
    enumposition ステータス;
    try
    {
        ステータス = (enumposition)Enum.Parse(typeof(enumposition), data);
    }
    catch (ArgumentException)
    {
        this.ErrorLabel.Text = "statusが正しくありません。";
        return;
    }
    //enumの定義値になっているかを確認する
    if (Enum.IsDefined(typeof(enumposition), ステータス) == false)
    {
        this.ErrorLabel.Text = "statusは定義されていません。";
        return;
    }

    2006年7月1日 6:01
  • # 特に事情がないのであれば、
    予め用意されているSerializerを使用して、
    ObjectをSerialize/Deserializeするとか。
    2006年7月2日 8:47