List <object> </object>中的预初始化对象

时间:2014-03-03 13:04:52

标签: c# linq

我想问你这个阻碍我很久的问题

我有一个像

这样的清单
 List<ViewModel> listVoie = new List<ViewModel>();

并在此列表中对象“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不为空;他们从其他方法加载一些值。

3 个答案:

答案 0 :(得分:0)

以下一行:

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

实际上创建了一个空列表。您拥有的参数并不表示您使用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++;
    }

与其他名单相同。

答案 1 :(得分:0)

  

事实上,我希望每个List<ViewModel>都返回一个ViewModel   有两个值来自listPoint1,一个来自listPoint2

您可以简单地Zip两个序列:

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

答案 2 :(得分: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++;
        }
    }
}

为List创建一个新类,如下所示:

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