2017-12-27 1551 views
0

我在將WWW字符串數組轉換爲類列表時遇到了一些麻煩。我想要做的是實例化一個預製件,其中包含許多文本元素。 這是基礎類將字符串數組從WWW轉換爲Unity3d中的類列表

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; 
    } 



} 

下面是從MySQL數據庫獲取WWW數據的功能

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(); 


    } 

它看起來像它應該只是工作,它給人的錯誤:類型VehicleIndex' does not contain a constructor that takes 0'論據 我錯過了什麼?我需要爲課堂增添些什麼嗎?一個列表?數組? 感謝您的幫助!對此,我真的非常感激。

ADDITIONAL- 添加對象初始

public VehicleIndex Vi; 

然後改變了lambda表達式

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等);然後在lambda Vi.ID = VehicleSt4ringArray [0]中。等等...我在球場D嗎?如果沒有,請分解它,lambda和WWW陣列對我來說是新的。 –

+0

現在非常困惑。獲取錯誤:由於類型'VehicleIndex'沒有實現'System.Collections.IEnumerable'接口 –

+0

無法確定爲什麼添加'public VehicleIndex Vi;'並且更改了該屬性'VehicleIndex'無法用集合對象初始值設定項初始化查詢你做的方式。如果你只是將lambda更改爲我給你的語法,它應該可以正常工作。要麼或者刪除你有的構造函數。 –