System.Linq.IOrderedEnumerable不包含'ToList'的定义

时间:2013-05-15 15:51:21

标签: .net linq generics collections

现在这个让我难过,所以我很感激你的帮助。我在.NET 4.0应用程序中测试了此代码,它工作正常。但是,当我将其移回我的3.5环境时,我在构建时收到以下错误消息。

System.Linq.IOrderedEnumerable不包含'ToList'的定义,并且最好的扩展方法重载'System.Linq.Enumerable.ToList(System.Collections.Generic.IEnumerable)'有一些无效的参数

它抱怨的代码是以下

 List<String> PathValues = GetReportValues(settings.DirectoryDefinition.NameTokens.OrderBy(x => x.Index).ToList<Token>());

GetReportValues方法的签名如下

 private List<String> GetReportValues(List<Token> TokenList)
{
   List<String> PathValues = new List<String>();
/// code goes here
  return PathValues;
}

对于NameTokens,我有

   [XmlElement(Type = typeof(List<DirectoryPatternToken>))]
    public List<DirectoryPatternToken> NameTokens { get; set; }

DirectoryDe​​finition.NameTokens 对象是一个包含从Token类派生的对象的列表。 GetReportValues只需要一个令牌列表,其中包含DirectoryDe​​finition

 [Serializable]
public class DirectoryPatternToken : Token
{


}

正如我之前解释的那样,这在.NET 4.0中测试得很好。我怎么能在3.5中使用这个?提前致谢

4 个答案:

答案 0 :(得分:1)

.ToList<Token>()更改为.ToList<string>()

或简单地将其写为.ToList()

或根本不使用它,因为您的方法已经返回List<string>

答案 1 :(得分:0)

 List<DirectoryPatternToken> tokens = 
             settings.DirectoryDefinition.NameTokens.OrderBy(x => x.Index).ToList();
 List<string> pathValues = GetReportValues(tokens);

您可以从中提取字符串属性

答案 2 :(得分:0)

C#4.0实现了一种称为通用协方差的功能:

http://msdn.microsoft.com/en-us/library/dd799517(v=vs.100).aspx

这允许List&lt; DirectoryPatternToken&gt;被视为列表&lt;令牌&gt;因为DirectoryPatternToken派生自Token。由于C#3.5没有此功能,您必须使用这些行来编译代码:

List<String> PathValues = GetReportValues(NameTokens.OrderBy(x => x.index).ToList<DirectoryPatternToken>());

private static List<String> GetReportValues(List<DirectoryPatternToken> TokenList)

答案 3 :(得分:0)

您正在寻找的ToList方法是一种扩展方法。尝试将此using指令添加到文件顶部:

使用System.Linq;通过添加此using指令,您向编译器指示应该导入该命名空间中的任何扩展方法。