2011-12-15 3 views
0

以下は、私が展開しようとしているコードです。あなたが見ることができるように、私はリスト "mylist"のための特別なデータ型 "mydatatype"を作るために空のインタフェースを配備しています。 出力には、割り当てられた値が表示されます。しかし、私はぎこちないデータを取得しています。誰かが説明できますか?リストにアクセスするための空白のインターフェイスの実装

public class list 
{ 
    interface mydatatype 
    { 
    } 
    public class mystring : mydatatype 
    { 
     public string mystrings{ get; set; } 

    } 
    public class myint : mydatatype 
    { 
     public int myints{ get; set; } 
    } 
    public class mydouble : mydatatype 
    { 
     public double mydoubles{ get; set; } 
    } 
    public static void Main() 
    { 


     List<mydatatype> mylist = new List<mydatatype> 
      { 
       new mystring(), 
       new myint(), 
       new mydouble(), 
      }; 
     mystring ab = new mystring(); 
     myint mi = new myint(); 
     mydouble mf = new mydouble(); 

     ab.mystrings = "asdf"; 
     mi.myints = 12; 
     mf.mydoubles = 12.223; 

     mylist.Add(ab); 
     mylist.Add(mi); 
     mylist.Add(mf); 
     foreach (mydatatype element in mylist) 
     { 
      Console.WriteLine(element); 
     } 

     Console.ReadLine(); 
     } 

    } 
} 
+0

あなたが得意とする「ばかげたデータ」をお見せください。 – Fischermaen

+1

ネストされた型を使用していて、.NET命名規則を無視している理由はありますか?私は以下のように私の出力を意味し、 "TestApplications" ちんぷんかんぷんことで –

答えて

2

「ちんぷんかんぷんデータが」本当のエラーの説明ではありません...

しかし、何をここで起こっていることはConsole.WriteLine(element);Console.WriteLine(element.ToString());と同じであるということです。クラス内でToStringをオーバーライドしていないため、値の代わりにクラス名が出力されます。

public class mystring : mydatatype 
{ 
    public string mystrings{ get; set; } 

    public override string ToString() 
    { 
     return mystrings; 
    } 

} 
public class myint : mydatatype 
{ 
    public int myints{ get; set; } 

    public override string ToString() 
    { 
     return myints.ToString(); 
    } 
} 
public class mydouble : mydatatype 
{ 
    public double mydoubles{ get; set; } 

    public override string ToString() 
    { 
     return mydoubles.ToString(); 
    } 
} 
+0

は私のプロジェクト名です:: 'TestApplications.list + mystrings TestApplications.list +ミント TestApplications.list + mydouble TestApplications.list + mystrings TestApplications .list + myint TestApplications.list + mydouble' **割り当てられた値を表示する代わりに、データ型の名前とそのパスを表示しています。これも2度です。 一部のエリートアドバイザーとして、私はToString()メソッドをオーバーライドする必要があります。誰もこのアイデアを採用する方法を説明できますか? –

+0

@deepaksahu:私の答えに更新を見てください。ところで、あなたの質問に完全に答えることができない場合は、回答を受け入れるべきではありません。 –

+0

こんにちはダニエルヒルガースありがとう。私はちょうど同じことを働いて、あなたのアップデートで同じを参照してください..今私のコードはsmooothを働いています...ありがとう..ハッピーコーディング。 –

0

出力を制御するには、それぞれのクラスでToStringを上書きする必要があります。現在のところ、各オブジェクトのクラス名が表示されます。

最初に異なるデータ型の3つのインスタンスを使用してリストを初期化しています。これは、追加したデータの前に印刷された値が表示されている可能性があります。私はこれがあなたが「ばかげたデータ」を意味するものだと思います。

0

あなたの配列リストには6つの要素があります。 3つの初期化されていないものをあなたのリストをインスタンス化するときに入れ、3つの初期化されたものを追加します。

リスト内の各要素を表示すると、各要素のToString()関数が呼び出されます(デフォルトでは型の名前)。

+0

はい、あなたは正しいジャプジャンです。私はリスト宣言から初期化コンポーネントを削除しましたが、現在はそれらの初期化されていないデータを取得していません。また、私は正常にToStringのオーバーライドを実装し、今私は私の出力として欲しいものを取得します。 –

関連する問題