无法隐式转换类型IEnumerable <list <metric>&gt;'到'IEnumerable <metric>'。存在显式转换(您是否缺少演员?)</metric> </list <metric>

时间:2013-10-20 16:11:33

标签: c# linq list dictionary extension-methods

我是c#高级编程的新手,所以很多时候我都很难掌握。

我正在尝试扩展我的自定义Dictionary对象,该对象具有自定义类和键值对的自定义类列表。

在这个静态类中,我正在为我的字典的部分键扩展部分匹配功能,该部分键应返回List<T>而不是仅T

public static class GADictionaryExtention
{
    internal static List<T> PartialMatch<T>(this Dictionary<KeyDimensions, T> dictionary, 
                                            KeyDimensions partialKey)
    {
        IEnumerable<KeyDimensions> fullMatchingKeys = null;
        fullMatchingKeys = dictionary.Keys.Where(currentKey => currentKey.Contains(partialKey));
        List<T> returnedValues = new List<T>();

        foreach (KeyDimensions currentKey in fullMatchingKeys)
        {
            returnedValues.Add(dictionary[currentKey]);
        }

        return returnedValues;
    }
}

在我的调用代码中,我尝试通过以下代码访问所有List<T>结果。

List<List<Metric>> m1 = DataDictionary.PartialMatch(kd);

但是我收到以下错误。

Cannot implicitly convert type 
'System.Collections.Generic.IEnumerable<System.Collections.Generic.List<Metric>>'
to 'System.Collections.Generic.IEnumerable<Metric>'. 
An explicit conversion exists (are you missing a cast?)

1 个答案:

答案 0 :(得分:1)

您的调用应该是这样的:

List<Metric> m1 = DataDictionary.PartialMatch(kd);

因为您从扩展方法返回List<T>

<强>更新 根据你的评论T = List<Metric>,我认为你应该如下所示:

List<List<Metric>> m1 = (List<List<Metric>>)DataDictionary.PartialMatch(kd);