2016-04-05 16 views
1

これまではカスタムクラスを作成していないので、これは可能ではないかもしれません。多くのテキストファイルを読み込み、プログラム全体で使用するための特定の情報を保存します。私はそれだけで同じ値「class.textのprogram.nameの名前に」カスタムクラスをCで構築する#

を返すリストを読み込むしようとすると、誰もがウェブサイトに私を指すことができます前に、しかし、私はカスタムクラスを構築したことがありません

class text 
    { 
     public int IDnum { get; set; } 
     public string file { get; set; } 
     public int lineNum { get; set; } 
     public string FileText { get; set; } 
     public string lineType { get; set; } 
    } 

    List<text> listOne = new List<text>(); 
    internal void ReadFile() 
    { 
     try 
     { 
      int IDtype = 0; 
      foreach (string x in resultFiles) 
      { 
       using (StreamReader sr = new StreamReader(x)) 
       { 
        string s;//text line 

        int LINECOUNT = 0; 
        string type = "not defined"; 
        while ((s = sr.ReadLine()) != null)// this reads the line 
        { 
         if(s.Contains("COMPUTERNAME=")) 
         { 
          type = "PC Name"; 
         } 

         if (s.Contains("Original Install Date:  ")) 
         { 
          type = "Original Install Date"; 
         } 
         if (LINECOUNT==2) 
         { 
          type = "other Date"; 
         } 
         if (s.Contains("DisplayName\"=")) 
         { 
           type = "Add/Remove Programs"; 
         } 

         text text1 = new text { IDnum = IDtype, lineNum=LINECOUNT, file=x, FileText=s, lineType=type}; 
         LINECOUNT++; 
         IDtype++; 
         listOne.Add(text1); 
        } 

        sr.Close(); 
       } 
      } 
      foreach(var x in listOne) 
      { 
       MessageBox.Show(x.ToString()); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 

私はもっ​​と多くの事例を学ぶことができますか?何かアドバイスを事前に

感謝:)

+2

'x.ToString()'を呼び出すときに適切な結果を得るには、テキストクラスの '.ToString()'メソッドをオーバーライドする必要があります。 ToString()を呼び出すときにどのような結果が期待されますか? – Camo

答えて

1

listOneがクラスtextのリストなので、ループ内であなたが実際にクラス名ではなく、コンテンツを印刷します。

foreach(var x in listOne) 
{ 
    MessageBox.Show(x.IDnum + " " + x.file + ...); 
} 

補足として、C#のクラス名は大文字で始まる必要があります。

3

x.ToString()は、文字列ではなくクラスの種類であるため、機能しません。

あなたはアイテム

foreach (var x in listOne) 
{ 
    MessageBox.Show(x.file + " " + x.FileText); 
} 

またはあなたのクラスでToString()メソッドをオーバーライドするプロパティにアクセスすることができます - そして、あなたがする必要がToString()メソッドを使用するにはx.ToString()

class text 
{ 
    public int IDnum { get; set; } 
    public string file { get; set; } 
    public int lineNum { get; set; } 
    public string FileText { get; set; } 
    public string lineType { get; set; } 

    public override string ToString() 
    { 
     return string.Format("{0}, {1}", this.file, this.FileText); 
    } 
} 
+2

... 'text'の' ToString'をオーバーライドします(OPは 'Text'のような.NET大文字表記規則に従う別の名前を選択する必要があります)。 –

+0

@TimSchmelterありがとう、私は昨日ToStringをオーバーライドすることについての議論を持っていたので、私はそれを最初に言及したくなかったhttp://stackoverflow.com/questions/36398000/create-comma-separated-list-from-list-of-objects/36398086 #36398086 – fubo

+0

しかし、ToStringとreflectionの代わりに、私はそのタスクの[this](http://stackoverflow.com/a/36421337/284240)アプローチを使用します。 –

1

を使用することができますがそれを上書きする次のように:

class text 
{ 
    public int IDnum { get; set; } 
    public string file { get; set; } 
    public int lineNum { get; set; } 
    public string FileText { get; set; } 
    public string lineType { get; set; } 

    public override ToString() 
    { 
     return fileText; // return here whatever you want to use 
    } 
} 

あなたのテストクラスのインスタンスに関する情報を取得するためにToString()を使用しています。上のようなToStringを実装するか、クラスのプロパティを使用すると、より良い結果が得られます。

関連する問題