将任何类型的字典转换为IEnumerable集合

时间:2011-11-09 05:41:15

标签: c# generics type-conversion

我已经编写了一些代码来将任何IEnumerable集合输出到文件中,但是无法将字典传递给它。我现在正在尝试将字典(可能是intintintstring或任何其他组合)转换为数组,以便我可以执行此操作。当我尝试将其传递给需要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 :(得分:0)

TypedListToFile<string[,]>(myArray, FilePath); 

myArray的类型不是IEnumerable<string[,]>,因此myArray不能是此方法的第一个参数。

答案 1 :(得分:0)

这实际上取决于你要做什么:当你读到:Why do C# Multidimensional arrays not implement IEnumerable<T>?你会发现多维数组没有实现IEnumerable,所以你必须先转换它。然而,你的代码没有意义。我假设您需要在循环中增加计数?

现在至于解决方案:您可以通过在其上应用linq查询来模拟VB行为,该行为自动将多维数组转换为枚举。像:

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
}