System.Collections.Generic.List <string>в System.Collections.Generic.List <string>[*, *] - PullRequest
1 голос
/ 01 марта 2012

Я использую C # asp.net в моем проекте. Я использую 2d массив в этом. По имени комнатно. Когда я пытаюсь удалить одну строку в этом. Поэтому я конвертирую массив в список.

static string[,] roomno = new string[100, 14];
List<string>[,] lst = new List<string>[100, 14];



lst = roomno.Cast<string>[,]().ToList();

Error   1   Invalid expression term 'string' in this line...
if i try below code,
 lst = roomno.Cast<string>().ToList();

Я получил

Error   3   Cannot implicitly convert type 'System.Collections.Generic.List<string>' to 'System.Collections.Generic.List<string>[*,*]'

lst = roomno.Cast (). ToList ();

В чем ошибка в моем коде?.

После этого я планирую удалить строку в списке, lst.RemoveAt(array_qty);

Ответы [ 2 ]

5 голосов
/ 01 марта 2012

Это:

List<string>[,] lst = new List<string>[100, 14];

объявляет двумерный массив значений List<string>.

Это:

roomno.Cast<string>[,]().ToList();

... просто не имеет смысла из-за позиции [,] между аргументом типа и () для вызова метода. Если вы изменили его на:

roomno.Cast<string[,]>().ToList();

тогда это будет создавать List<string[,]>, но это все равно не то же самое, что List<string>[,].

Кроме того, roomno - это просто двумерный массив строк - который на самом деле является единственной последовательностью строк в отношении LINQ - так почему вы пытаетесь преобразовать его в 3 -мерный тип?

Не ясно, что вы пытаетесь сделать или почему вы пытаетесь это сделать, но, надеюсь, это, по крайней мере, поможет объяснить, почему это не работает ...

Если честно, я бы старался не смешивать двумерные массивы и списки в одном типе. Поможет ли другой пользовательский тип?

РЕДАКТИРОВАТЬ: LINQ не будет много использовать с 2-D массивом. Он действительно предназначен для отдельных последовательностей. Я подозреваю, что вам нужно будет сделать это «вручную» - вот небольшая, но полная программа, например:

using System;

class Program
{
    static void Main(string[] args)        
    {
        string[,] values = {
            {"x", "y", "z"},
            {"a", "b", "c"},
            {"0", "1", "2"}
        };

        values = RemoveRow(values, 1);

        for (int row = 0; row < values.GetLength(0); row++)
        {
            for (int column = 0; column < values.GetLength(1); column++)
            {
                Console.Write(values[row, column]);
            }
            Console.WriteLine();
        }
    }

    private static string[,] RemoveRow(string[,] array, int row)
    {
        int rowCount = array.GetLength(0);
        int columnCount = array.GetLength(1);
        string[,] ret = new string[rowCount - 1, columnCount];

        Array.Copy(array, 0, ret, 0, row * columnCount);
        Array.Copy(array, (row + 1) * columnCount,
                   ret, row * columnCount, (rowCount - row - 1) * columnCount);
        return ret;
    }
}
1 голос
/ 01 марта 2012

Если вам нужно использовать двухмерный список, попробуйте List<List<string>>().Но разговор с массивом в этом случае может быть: list.Select(x => x.ToArray()).ToArray() и это string[][], но не string[,]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...