我想问你这个阻碍我很久的问题
我有一个像
这样的清单 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不为空;他们从其他方法加载一些值。
答案 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);