【ハルシオンブログ】UnityというかC#のListについて。最近使った親Listへの代入方法。
こんにちは。坂内っす。
今日はListについて。
ゲームを作っていると、同じクラスなどをまとめて格納したい時ってありますよね。
配列でもいいんですが、配列だと要素数増やしたりするのがめんどいので最近はいつもListを使ってます。
intなんかも入っちゃう優れもの。
作ったクラスもなんでも入っちゃう
Find関数を使うと、このListから「特定条件のものだけ取り出す」などの処理も簡単にできます。
【検索】
"あいうえお"が表示されます。
Findの中で検索をしています。
これが条件。ラムダ式を使う感じです。
「x => x.no == 0」
【継承クラスの格納】
子供のクラスを格納までは簡単です。
ほら、普通に入る。
それでは、ChildとChild2のListを別々に作ってParentのListへ代入する場合は?
これエラー出ます。
そのままでは代入できないんですよね。
そこで使うのがこれ。
Cast<親クラス>().ToList();
これを使うことで、親クラスにキャスト(型変換)して親のListに入れることができます。
※Cast関数を使うには、using System.Linq;が必要になります。
どこで使うかはわかりませんが、今作ってるゲームでこれ使う機会あったので簡単に紹介しておきました。
それでは あでゅ~ノシ
今日はListについて。
ゲームを作っていると、同じクラスなどをまとめて格納したい時ってありますよね。
配列でもいいんですが、配列だと要素数増やしたりするのがめんどいので最近はいつもListを使ってます。
intなんかも入っちゃう優れもの。
private void Start() {
List<int> intList = new List<int>();
intList.Add(11);
intList.Add(8);
intList.Add(2);
}
作ったクラスもなんでも入っちゃう
using System.Collections.Generic;
using UnityEngine;
public class ListTest : MonoBehaviour {
public class TestClass {
public int no;
public string moji;
}
private void Start() {
List<int> intList = new List<int>();
intList.Add(11);
intList.Add(8);
intList.Add(2);
List<TestClass> testAry = new List<TestClass>();
TestClass item1 = new TestClass();
item1.no = 0;
item1.moji = "あいうえお";
testAry.Add(item1);
TestClass item2 = new TestClass();
item2.no = 1;
item2.moji = "かきくけこ";
testAry.Add(item2);
}
}
Find関数を使うと、このListから「特定条件のものだけ取り出す」などの処理も簡単にできます。
【検索】
public class TestClass {
public int no;
public string moji;
}
private void Start() {
List<int> intList = new List<int>();
intList.Add(11);
intList.Add(8);
intList.Add(2);
List<TestClass> testAry = new List<TestClass>();
TestClass item1 = new TestClass();
item1.no = 0;
item1.moji = "あいうえお";
testAry.Add(item1);
TestClass item2 = new TestClass();
item2.no = 1;
item2.moji = "かきくけこ";
testAry.Add(item2);
// 検索
TestClass findItem = testAry.Find(x => x.no == 0);
Debug.Log(findItem.moji);
"あいうえお"が表示されます。
Findの中で検索をしています。
これが条件。ラムダ式を使う感じです。
「x => x.no == 0」
【継承クラスの格納】
子供のクラスを格納までは簡単です。
public class ParentClass {
public int no;
public string moji;
}
public class ChildClass : ParentClass {
public string name;
}
public class ChildClass2 : ParentClass {
public string name2;
}
private void Start() {
ChildClass child = new ChildClass();
child.no = 0;
child.moji = "ああ";
child.name = "チャイルド";
ChildClass2 child2 = new ChildClass2();
child2.no = 1;
child2.moji = "いい";
child2.name2 = "チャイルド2";
List<ParentClass> parentAry = new List<ParentClass>();
parentAry.Add(child);
parentAry.Add(child2);
}
ほら、普通に入る。
それでは、ChildとChild2のListを別々に作ってParentのListへ代入する場合は?
public class ParentClass {
public int no;
public string moji;
}
public class ChildClass : ParentClass {
public string name;
}
public class ChildClass2 : ParentClass {
public string name2;
}
private void Start() {
List<ChildClass> childAry = new List<ChildClass>();
ChildClass child1_1 = new ChildClass();
child1_1.no = 0;
child1_1.moji = "ああ";
child1_1.name = "チャイルド1-1";
childAry.Add(child1_1);
ChildClass child1_2 = new ChildClass();
child1_1.no = 1;
child1_1.moji = "あああ";
child1_1.name = "チャイルド1-2";
childAry.Add(child1_2);
List<ChildClass2> child2Ary = new List<ChildClass2>();
ChildClass2 child2_1 = new ChildClass2();
child2_1.no = 0;
child2_1.moji = "いい";
child2_1.name2 = "チャイルド2-1";
child2Ary.Add(child2_1);
ChildClass2 child2_2 = new ChildClass2();
child2_2.no = 0;
child2_2.moji = "いいい";
child2_2.name2 = "チャイルド2-2";
child2Ary.Add(child2_2);
List<ParentClass> parentAry = new List<ParentClass>();
parentAry = childAry;
}
これエラー出ます。
そのままでは代入できないんですよね。
そこで使うのがこれ。
parentAry = childAry.Cast<ParentClass>().ToList();
Cast<親クラス>().ToList();
これを使うことで、親クラスにキャスト(型変換)して親のListに入れることができます。
※Cast関数を使うには、using System.Linq;が必要になります。
どこで使うかはわかりませんが、今作ってるゲームでこれ使う機会あったので簡単に紹介しておきました。
それでは あでゅ~ノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】SoftMaskScriptってやつをちょっと使ってみた。 | 【ハルシオンブログ】int → enum の変換とか最近使ったちょっとしたやつ? »
コメント
| h o m e |