2017-12-27 1581 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更改为我给你的语法,它应该可以正常工作。要么或者删除你有的构造函数。 –