FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】UnityというかC#のListについて。最近使った親Listへの代入方法。 

    こんにちは。坂内っす。

    今日は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)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/553-63d1a6d1
    この記事にトラックバックする(FC2ブログユーザー)