2017-12-27 30 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 = 새로운 VehicleIndex (param1, param2, param3 등); 그런 다음 람다 Vi.ID = VehicleSt4ringArray [0]. 등 ... 공 파크 D에 있습니까? 그렇지 않다면, 람다와 WWW 배열이 나에게 새롭다. –

+0

매우 혼란스러워합니다. 오류 받기 :'VehicleIndex '타입이'System.Collections.IEnumerable'인터페이스를 구현하지 않기 때문에, 필드 또는 프로퍼티'VehicleIndex '는 콜렉션 객체 이니셜 라이저로 초기화 될 수 없습니다. –

+0

'public VehicleIndex Vi;'를 추가하고 왜 당신이했던 방식으로 질문을하십시오. 람다를 구문으로 바꾸면 잘 작동합니다. 당신이 가진 생성자를 제거하거나 제거하십시오. –