将字符串数组从 WWW 转换为 Unity3d 中的 class 列表
Converting a string array from WWW to a class list in Unity3d
我在将 WWW 字符串数组转换为 class 列表时遇到了一些问题。我想要做的是实例化一个预制件,其中包含许多文本元素。
这里是基础class
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' arguments
我错过了什么?我需要向 class 添加内容吗?一个列表?数组?
谢谢您的帮助!我真的很感激。
额外-
添加了一个对象初始值设定项
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();
避免红线的唯一方法是使用双等号。我不确定这是否正确,因为它仍然无法正常工作,我猜不是。
这与 JavaScript 的 join()
基本相同
您有一个将所有属性作为参数的构造函数;只需使用它而不是对象初始值设定项:
VehicleIndexList = VehicleStringArray.Select(sArr => new VehicleIndex
(
VehicleStringArray[0],
VehicleStringArray[1],
VehicleStringArray[2],
VehicleStringArray[3],
VehicleStringArray[4]
)).ToList();
但是请注意,构造器通常只需要需要 的参数才能使对象正常运行。如果不需要 属性 值,则删除构造函数并改用初始化语法 (new VehicleIndex { }
) 没有错。
我在将 WWW 字符串数组转换为 class 列表时遇到了一些问题。我想要做的是实例化一个预制件,其中包含许多文本元素。 这里是基础class
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' arguments
我错过了什么?我需要向 class 添加内容吗?一个列表?数组?
谢谢您的帮助!我真的很感激。
额外- 添加了一个对象初始值设定项
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();
避免红线的唯一方法是使用双等号。我不确定这是否正确,因为它仍然无法正常工作,我猜不是。
这与 JavaScript 的 join()
基本相同您有一个将所有属性作为参数的构造函数;只需使用它而不是对象初始值设定项:
VehicleIndexList = VehicleStringArray.Select(sArr => new VehicleIndex
(
VehicleStringArray[0],
VehicleStringArray[1],
VehicleStringArray[2],
VehicleStringArray[3],
VehicleStringArray[4]
)).ToList();
但是请注意,构造器通常只需要需要 的参数才能使对象正常运行。如果不需要 属性 值,则删除构造函数并改用初始化语法 (new VehicleIndex { }
) 没有错。