クラスのインスタンスをListにする
同一クラスから生成したインスタンスをまとめて加工、特定条件で抽出するなどの処理をするためにListにします
目次
基本
まず基本からです
オブジェクト指向の基本知識とコレクションの知識が必要です
サンプルコードをみてください
基本となるクラスとインスタンス作成
class People
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
People people1 = new People();
people1.Name = "田中";
people1.Age = 35;
People people2 = new People();
people2.Name = "山田";
people2.Age = 20;
Console.WriteLine(people1.Name);
}
}
実行結果
田中
2人のインスタンス(模擬人間)を作りました。
people1変数とpeople2変数です。この変数は、People型で参照型になります。
people1の名前を知りたいとき、インスタンス名.メンバー変数名でアクセスするとそのデータを取り出すことができます。言葉で言い換えると、「people1の名前」になります。
people1.Name
データとして管理する
今は2人ですが、これが20人、200人、2000人とどんどん増えれば扱いが大変になってきます。ここで、配列やListの登場です。
例えば、int型のListの場合、
List<int> numbers = new List<int>();
numbers.Add(20);
numbers.Add(10);
というようにデータを増やしていくことでができます。
<>の中には、型が記述されています。
これを使って、Peopleを管理してみます。
上記のコードを変化させて、
List<People> people = new List<People>();
とします。
次にListに追加します。
List<People> people = new List<People>();
people.Add(people1);
people.Add(people2);
読みだすには、次のようにします。
string name = people[0].Name;
Console.WriteLine(name);
インライン(1行にまとめる)と、
Console.WriteLine(people[0].Name);
でもいいです。(同じ処理)
最終的なコードサンプル
- 初期値をコンストラクタで代入
- Listの初期値代入省略
- 暗黙の型宣言(var)を適用
- 全てのListデータの表示
class People
{
public string Name { get; set; }
public int Age { get; set; }
public People(string name, int age)
{
Name = name;
Age = age;
}
}
class Program
{
static void Main(string[] args)
{
var people1 = new People("田中", 35);
var people2 = new People("山田", 20);
var people = new List<People>
{
people1,
people2
};
foreach (var person in people)
{
Console.WriteLine(person);
}
}
}
実行結果
田中
山田
応用
条件に合った検索
25歳以上だけ抽出したい
class People
{
public string Name { get; set; }
public int Age { get; set; }
public People(string name, int age)
{
Name = name;
Age = age;
}
}
class Program
{
static void Main(string[] args)
{
var people1 = new People("田中", 35);
var people2 = new People("山田", 20);
var people = new List<People>
{
people1,
people2
};
var overAge25People = people.Where(person => person > 25);
foreach (var person in overAge25People)
{
Console.WriteLine(person);
}
}
}
実行結果
田中
派生クラスをまたぐ検索をしたい
2人は先生と生徒クラスだとします
先生や生徒関係なく抽出をしたい場合になります
class People
{
public string Name { get; set; }
public int Age { get; set; }
public People(string name, int age)
{
Name = name;
Age = age;
}
}
class Teacher : People
{
public Teacher(string name, int age) : base(name, age)
{
}
}
class Student : People
{
public Student(string name, int age) : base(name, age)
{
}
}
class Program
{
static void Main(string[] args)
{
People people1 = new Teacher("田中", 35);
People people2 = new Student("山田", 20);
var people = new List<People>
{
people1,
people2
};
var overAge25People = people.Where(person => person > 25);
foreach (var person in overAge25People)
{
Console.WriteLine(person);
}
}
}
実行結果
田中
ディスカッション
コメント一覧
まだ、コメントがありません