Преобразовать словарь любого типа в коллекцию IEnumerable - PullRequest
0 голосов
/ 09 ноября 2011

Я написал некоторый код для вывода любой коллекции IEnumerable в файл, но не могу передать в нее словари.Я сейчас пытаюсь преобразовать словарь (который может быть int, int или int, string или любую другую комбинацию) в массив, чтобы я мог сделать это.Приведенный ниже код указывает на ошибку, когда я пытаюсь передать ее методу, требующему IEnumerable.

Дженерики - это то, с чем я не особо справился, так что, возможно, я что-то не так сделал с ними.

        public static bool DictionaryToFile<T, U>(Dictionary<T, U> TheDictionary, string FilePath)
    {
        long count = 0;
        string[,] myArray = new string[2,TheDictionary.Count];
        foreach (var current in TheDictionary)
        {
            myArray[0, count] = current.Key.ToString();
            myArray[1, count] = current.Value.ToString();
        }

 // error appears here
        TypedListToFile<string[,]>(myArray, FilePath);



        return true;
    }

// Другой, которому я звоню:

public static bool TypedListToFile<T>(IEnumerable<T> TypedList, string FilePath)

    {

Ответы [ 2 ]

0 голосов
/ 09 ноября 2011

Это действительно зависит от того, что вы пытаетесь сделать: когда вы читаете: Почему C # многомерные массивы не реализуют IEnumerable ? Вы увидите, что многомерный массив не реализует IEnumerable, поэтому вы должны сначала преобразовать его. Тем не менее, ваш код не имеет смысла. Я полагаю, вам нужно увеличить счетчик в вашем цикле?

Теперь что касается решений: вы можете смоделировать поведение VB, которое автоматически преобразует многомерные массивы в перечислимые значения, применяя к ним запрос linq. как:

var arrayEnumerable = from entry in myArray select entry;
// and some proof that this works:
foreach (string entry in arrayEnumerable)
{
    // this will succesfully loop your array from left to right and top to bottom
}
0 голосов
/ 09 ноября 2011
TypedListToFile<string[,]>(myArray, FilePath); 

Тип myArray не IEnumerable<string[,]>, поэтому myArray не может быть первым параметром этого метода.

...