2016-11-15 13 views
0
using System; 
using System.Collections; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace classQuiz 
{ 
class A { 
    public int a = 100; 
    public int b = 200; 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     A obj = new A();//object of that class 
     ArrayList list = new ArrayList(); 
     list.Add(obj);//passing object 
     Console.WriteLine(list[0]);//output down the code 
     Console.ReadKey(); 
    } 
} 
} 

出力を使用してデータメンバーの取得: - 私は私が何をしたい配列リストにオブジェクトを渡しています。このプログラムでは、ArrayListのにクラスのオブジェクトを追加し、それはArrayListの

  classQuiz.A 

を私が書くことができる方法であります配列リストを使ってコンソール上のデータメンバーにアクセスしたいと思います。私は試しました。

list[0].a; 
//or 
list[0].b; 

これを達成するためには何ができますか?

 + 

私は本当に非常に混乱メートル リストへのArrayListを変更する必要はありません。 :D

+3

ドント、もはや 'ArrayList'を使用ArrayList'は、私だけが含まれているリスト'の代わりに ''として使用します'a'または' b'メンバを持たない 'object'型の構造体です。 – HimBromBeere

+0

リストに変更してみませんか?どんな強力な理由もなく、あなたのコードをより良く保守しやすくするのを手伝うことは難しいです。 – HimBromBeere

+0

私は第2の方法を探していました –

答えて

2

ArrayListがあなたの上の任意の知識を持っているドントobjet -instancesの単なる集合体であるとあなたの問題が発生しました実際のタイプ。

  1. その実際の型へのキャストのすべての項目::

    A obj = new A();//object of that class 
    ArrayList list = new ArrayList(); 
    list.Add(obj);//passing object 
    ((A)list[0]).a = 1;   // list[0] is just object 
    
  2. またはより良いアプローチ:だからtowo possibilitesを持っている一般的なコレクションを使用して、強く型付けされているそのようなList<T>として:

    A obj = new A();//object of that class 
    List<A>list = new List<A>(); 
    list.Add(obj);//passing object // list[0] is of your actual type 
    obj.a = 1; 
    
+0

よく、私は –

+0

あなたの最初のポイントは私のクエリに十分です。 –

2

ArrayListは、格納しているオブジェクトの種類がわからないためです。店舗はObjectです。それだけです。このため、コンパイラは、aまたはbと呼ばれるメンバーが存在するかどうかはわかりません。

代わりにList<A>を使用する必要があります。には、保存するオブジェクトの種類が分かります。これに

ArrayList list = new ArrayList(); 

using System.Collections.Generic; 

その後、Console.WriteLine(list[0].a);Console.WriteLine(list[0].b);が動作shoud:

List<A> list = new List<A>(); 

またusingディレクティブを追加するだけで、これを変更します。

だけArrayListを使用できる場合は、Aにリスト内のオブジェクトをキャスト:

Console.WriteLine(((A)list[0]).a); 
Console.WriteLine(((A)list[0]).b); 
+0

リストにarraylistを変更したくないです

+0

私は試したが、私は理解できないが、今私はそれを持っていた:D –

関連する問題