3141


UnityでC#を用いています。  
独自クラスをリストで扱いたいのですが、要素を一行で追加しようとするとエラーが出てしまいます。

[code]

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class TEST : MonoBehaviour {
        public class test {
            public int    I;
            public float  F;
            public string S;
        }
    
        private List<test> qwe = new List<test>();
        private List<string> asd = new List<string>();
    
        void Start() {
            asd.Add("あああ");
    
            test q = new test();
            q.I = 1;
            q.F = 2.5f;
            q.S = "いいい";
            qwe.Add(q); // バラバラなら追加できた
    
            qwe.Add (new test(2, 3.5f, "ううう")); // この方法でできるはず？
    
            Debug.Log(asd[0]+"  "+qwe[0].S+"  "+qwe[1].S);
            Debug.Break();
        }
    }
    
[/code]

発生したエラーは次の３つです。

[code]

    Assets/Scripts/TEST.cs(24,51): error CS1729: The type `TEST.test' does not contain a constructor that takes `3' arguments
    
    Assets/Scripts/TEST.cs(24,21): error CS1502: The best overloaded method match for `System.Collections.Generic.List<TEST.test>.Add(TEST.test)' has some invalid arguments
    
    Assets/Scripts/TEST.cs(24,21): error CS1503: Argument `#1' cannot convert `object' expression to type `TEST.test'
    
[/code]

サイト内のコードをコピーしたりもしたのですが、何故か動作しません。  
正常に追加するにはどうしたら良いでしょうか？


CC BY-SA 3.0
2015-01-05T14:13:48.957
3139
2015-01-05T15:03:36.947
2015-01-05T14:56:42.580
30
6055
question
unity3d c#
リストに独自クラスの要素を追加したい


ジェネリックスを使います。 Tは、任意の型を指定します。

例:

[code]

    List<test> items = new List<test>();
    
[/code]

testクラスには、引数を受け取るコンストラクタが見つかりません。  
コンストラクタを実装するか、オブジェクト初期化を使用します。

[code]

    var o = new test(){
         I = 10,
         F = 2.5f,
         S = "hoge"
    };
    
[/code]

なお、これは、o.I = 10; 等とした場合と同じです。


CC BY-SA 3.0
2015-01-05T14:18:36.437
3140
2015-01-05T15:03:36.947
2015-01-05T15:03:36.947
2207
2207
3139
answer


最初のエラーについては、

[code]

     public class test {
        public int    I;
        public float  F;
        public string S;
        public test(int i, float f, string s) {
            I = i;
            F = f;
            S = s;
        }
    }
    
[/code]

と、3つの引数を取るコンストラクタを実装してはいかがでしょうか。(ついでに、メンバ変数は自動プロパティで定義するのが良い気もしました。)

`List`の扱いについてはPITAさんの書かれているように、<>で格納する型を指定されると良いでしょう。


CC BY-SA 3.0
2015-01-05T14:22:39.813
3141
2015-01-05T14:22:39.813
3313
3139
answer