2014-03-03 40 views
0

我想問您這個問題,它阻止了我很長一段時間預初始化對象<object>

我有一個像

List<ViewModel> listVoie = new List<ViewModel>(); 

,並在此列表中的對象「視圖模型的列表「是一種畫線功能,每次我需要給它兩個點4example

Dictionary<int, double> pointAdd= new Dictionary<int, double>();  
pointAdd.Add(listPoint1[i], 0); 
pointAdd.Add(listPoint2[i], -500); 

正如你可以看到我有另外兩個名單INT存儲

List<int> listPoint1 = new List<int>; List<int> listPoint2 = new List<int>; 

這兩個列表的長度相等但實際值不確定; 我需要將每一行定義爲一個新的對象「ViewModel」我怎麼能做到這一點?從現在開始,我有這樣的心態;但它不能工作,因爲ViewModel v將返回一個NullReferenceException

List<ViewModel> listVoie = new List<ViewModel>(new ViewModel[listPoint1.Count]); 
foreach (ViewModel v in listVoie) 
{ 
    Dictionary<int, double> pointAdd= new Dictionary<int, double>(); 
    for (int i = 0; i < listPoint1.Count; i++) 
    { 
     pointAdd.Add(listPoint1[i], 0); 
     pointAdd.Add(listPoint2[i], -500); 
     v.point= pointAdd; 
     .... 
     i++; 
    } 

有人可以幫助我嗎?可以原諒我愚蠢的問題打擾你...謝謝

兩個列表listPoint1和listPoint2不是空的;他們從其他方法加載一些值。

+1

你在哪裏在listPoint1和listPoint2添加一些價值? – alexmac

+0

您的代碼中的'listPoint1'和'listPoint2'都是空的 –

+0

在其他方法中,它將通過使用breakPoint返回listPoint1和listPoint2中的值列表;我可以看到它確實傳遞了價值; – WickedFAN

回答

0

以下行:

List<ViewModel> listVoie = new List<ViewModel>(new ViewModel[listPoint1.Count]); 

實際創建一個空List。你有的參數並不表示你用N個對象來填充列表,它只是出於表演的目的(List<T>的內部實現:初始化包含你的列表項目的數組,並且大小正確)。

你應該做的是:

// Empty list for now 
List<ViewModel> listVoie = new List<ViewModel>(); 

foreach (int j = 0; j < listPoint1.Count; j++) 
{ 
    // Creates the ViewModel here, and adds it to the list 
    var myViewModel = new myViewModel(); 
    listVoie.Add(myViewModel); 

    Dictionary<int, double> pointAdd= new Dictionary<int, double>(); 
    for (int i = 0; i < listPoint1.Count; i++) 
    { 
     pointAdd.Add(listPoint1[i], 0); 
     pointAdd.Add(listPoint2[i], -500); 
     myViewModel.point= pointAdd; 
     .... 
     i++; 
    } 

同樣的話有其他列表。

+0

Thnaks!這真的有幫助 – WickedFAN

0

其實我想每個ViewModel 都有自己的兩個值一個從listPoint1listPoint2

返回List<ViewModel>,一個你可以簡單地Zip兩個序列:

List<ViewModel> listVoie = 
    listPoint1.Zip(listPoint2, (p1,p2) => new ViewModel { 
      // use p1 and p2 
    }).ToList(); 
0

你可以定義你的ViewModel如下:

public class ViewModel 
{ 
    public Dictionary<int, double> point; 

    public void SetPoints(List<int> list1, List<int> list2) 
    { 
     point = new Dictionary<int, double>(); 
     for (int i = 0; i < list1.Count; i++) 
     { 
      point.Add(list1[i], 0); 
      point.Add(list2[i], -500); 
      i++; 
     } 
    } 
} 

創建列表中的一個新的類,如下所示:

public class ViewModelList : List<ViewModel> 
{ 
    public void UpdateAllPoints(List<int> list1, List<int> list2) 
    { 
     this.Clear(); 
     foreach (var item in list1) 
     { 
      var viewModel = new ViewModel(); 
      viewModel.SetPoints(list1, list2); 
      this.Add(viewModel); 
     } 
    } 
} 

,並用它作爲:

 var listVoie = new ViewModelList(); 
     listVoie.UpdateAllPoints(listPoint1, listPoint2); 
+0

是的;這可以工作;謝謝 – WickedFAN