使用来自IEnumerable的数据初始化并填充二维数组

时间:2014-09-01 18:50:53

标签: c# arrays ienumerable

我需要用一些来自IEnumerable的值填充二维数组。

public void ReturnJson(IEnumerable<Domain.Revenue.Revenue> listRevenues)
{
    double[,] dateYearActual;

    foreach (var variable in listRevenues)
    {
        dateYearActual= new double[,]
        {
           {CalculateMiliseconds(variable.DateHourInsertData), variable.Value}
        };
    }

    // ...
}

我不知道,但我认为存在更好的方法来做到这一点,并且在var data1我有以下错误variable dateYearActual might not be initialized before accessing.

更好的方法是使用来自IEnumerable的值填充二维数组?

2 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

var values = listRevenues
     .Select(x => new 
                  { 
                     Seconds = CalculateMiliseconds(x.DateHourInsertData), 
                     Value = x.Value 
                  }).ToList();

double[,] dateYearActual = new double[values.Count,2];

for(int i=0; i<values.Count; i++)
{ 
    dateYearActual[i,0] = values[i].Seconds;
    dateYearActual[i,1] = values[i].Value;
}

执行投影并将值放入List以避免多次枚举。然后使用值Count作为行计数创建数组,并使用for循环将每个元素设置为相应的值。

答案 1 :(得分:0)

您看到的错误是由于可能跳过foreach循环,然后当您尝试在代码末尾访问dateYearActual时未经初始化(即您从未为其分配过值)。要修复该错误,您可以更改

double[,] dateYearActual;

double[,] dateYearActual = new double[listRevenues.Length, 2];

您的代码的另一个问题是,当您拨打此电话时,您正在重新创建dateYearActualdateYearActual= new double[,] ...。相反,您需要使用索引for循环而不是foreach

for (int i =0; i<listRevenues.Length]; i++)
{
  listRevenues[i,0] = CalculateMiliseconds(variable.DateHourInsertData);
  listRevenues[i,1] = variable.Value;
}