2014-11-25 2 views
3

Я строю двумерный массив данных. Я хотел бы, чтобы установить первую строку этого массива на содержимое одномерного массива с соответствующим числом столбцов, например:Заполните одну строку двумерного массива одномерным массивом

private string[] GetHeaders() { 
    return new string[] { "First Name", "Last Name", "Phone" }; 
} 

private void BuildDataArray(IEnumerable<Person> rows) { 
    var data = new string[rows.Count() + 1, 3]; 

    // This statement is invalid, but it's roughly what I want to do: 
    data[0] = GetHeaders(); 

    var i = 1; 
    foreach (var row in rows) { 
     data[i, 0] = row.First; 
     data[i, 1] = row.Last; 
     data[i, 2] = row.Phone; 
     i++; 
    } 
} 

В принципе, я хотел бы более простой способ, чтобы заполнить первой строки, а не для итерации по каждому элементу, как я делаю с элементами rows.

Есть ли идиома C# для этого?

+3

какой-либо конкретной причине вы используете массивы? Это просто с 'List '. – BradleyDotNET

+1

Было бы легко, если бы вы использовали неровный массив вместо многомерного. – MarcinJuraszek

+0

@BradleyDotNET Мне нужно передать массив на какой-то существующий код, который принимает только объект [,] '. Я, вероятно, переписал бы эту функцию, чтобы использовать «Список », поскольку это облегчило бы многие вещи, но сначала мне интересно, возможно ли это. –

ответ

0

Вы должны изменить синтаксис:

var data = new string[rows.Count()][]; 

// This should be valid, an array of arrays 
data[0] = GetHeaders(); 

var i = 1; 
foreach (var row in rows) { 
    data[i][0] = row.First; 
    data[i][1] = row.Last; 
    data[i][2] = row.Phone; 
    i++; 
} 
+1

Следует отметить, что вы должны инициализировать 'data [i]' на каждой итерации 'foreach' (ранее не было), но в противном случае этот код Что мне нужно. Благодаря! –

Смежные вопросы