2017-12-27 28 views
0

WWW文字列配列をクラスリストに変換する際に問題があります。私がしたいのは、そこにいくつかのテキスト要素を持つプレハブをインスタンス化することです。タイプVehicleIndex' does not contain a constructor that takes 0' :ここで は文字列配列をWWWからUnity3dのクラスリストに変換

public List<VehicleIndex> VehicleIndexList = new List<VehicleIndex>(); 
    public string[] VehicleStringArray; 

    public IEnumerator GetAllVehicles() 
    { 
     WWW VehicleData = new WWW ("http://localhost/CMVM/LoadVehicle.php"); 
     yield return VehicleData; 

     Debug.Log (VehicleData.text); 
     string TheVehicleData = VehicleData.text; 
           The information comes back just fine.  
     if(TheVehicleData[TheVehicleData.Length - 1] == '/') 
     { 
     TheVehicleData.TrimEnd('/');  Here I'm removing the delimiter 
     } 
     string[] results = TheVehicleData.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 
     for (int i = 0; i < results.Length; i++) 
     { 
     Debug.Log (results[i]); 
     } 
     VehicleStringArray = results; The results go back into an array 

     VehicleIndexList = VehicleStringArray.Select(sArr => new VehicleIndex 
     { 
      ID=VehicleStringArray[0], 
      Make=VehicleStringArray[1], 
      Model=VehicleStringArray[2], 
      Year=VehicleStringArray[3], 
      Mileage=VehicleStringArray[4] 
     }).ToList(); 


    } 

それはそれだけで動作するはずです、それはエラーを与えるように見えるMySQLデータベースからWWWデータを取得する機能、基本クラスここ

public class VehicleIndex : MonoBehaviour 
{ 
    public string ID{ get; set;} 
    public string Make{ get; set;} 
    public string Model{ get; set;} 
    public string Year{ get; set;} 
    public string Mileage{ get; set;} 


    public VehicleIndex(string id, string make, string model, string year, string mileage) 
    { 
     this.ID = id; 
     this.Make = make; 
     this.Model = model; 
     this.Year = year; 
     this.Mileage = mileage; 
    } 



} 

されています引数 私は何が欠けていますか?クラスに何かを追加する必要がありますか?リスト?配列? 助けてくれてありがとう!ほんとうにありがとう。

ADDITIONAL-は、オブジェクト初期化子

public VehicleIndex Vi; 

を添加し、赤い線を回避する唯一の方法は、二重に等しいを使用することであった

VehicleIndexList = VehicleStringArray.Select(sArr => new VehicleIndex 
    { 
     Vi.ID==VehicleStringArray[0], 
     Vi.Make==VehicleStringArray[1], 
     Vi.Model==VehicleStringArray[2], 
     Vi.Year==VehicleStringArray[3], 
     Vi.Mileage==VehicleStringArray[4] 
    }).ToList(); 

にラムダ式を変更しました。私はこれが正しいかどうかわからない、それはまだ動作していないので、私は推測していない。

+0

'VehicleIndex'には引数を持たないコンストラクタがありますか?そうでない場合は、「Select」投影内にコンストラクタを作成するか、コンストラクタを呼び出すことができます。 –

+0

おっと、間違ったクラスを投稿しました。 –

答えて

1

あなたの引数としての特性のすべてを取るコンストラクタを持っています。ちょうどその代わりに、オブジェクト初期化子の使用:

VehicleIndexList = VehicleStringArray.Select(sArr => new VehicleIndex 
    (
     VehicleStringArray[0], 
     VehicleStringArray[1], 
     VehicleStringArray[2], 
     VehicleStringArray[3], 
     VehicleStringArray[4] 
    )).ToList(); 

注意は、しかし、contructorsは一般的にのみあるPARAMATERSが必要であることを正しく機能させるには、オブジェクトのためにを必要としていました。プロパティ値が必要ない場合は、コンストラクタを削除し、代わりに初期化構文(new VehicleIndex { })を使用しても問題ありません。

+0

なので、VehicleIndex Vi = new VehicleIndex(param1、param2、param3など);次に、ラムダVi.ID = VehicleSt4ringArray [0]。私はボールパークDにいますか?そうでない場合は、それを分解してください。ラムダとWWW配列は私には新しいものです。 –

+0

非常に混乱しました。エラーを取得する: 'VehicleIndex '型が' System.Collections.IEnumerable'インターフェースを実装していないため、フィールドまたはプロパティー 'VehicleIndex 'をコレクションオブジェクト初期化子で初期化することはできません。 –

+0

' public VehicleIndex Vi;あなたのやり方を質問してください。ラムダを文法に変更するだけなら、うまくいくはずです。あなたが持っているコンストラクタを削除するか、削除してください。 –