0

现在这个让我很难过,所以我会很感激一些帮助。我在 .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

4 回答 4

2

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

或者干脆把它写成.ToList()

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

于 2013-05-15T15:53:46.710 回答
0

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

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

于 2013-07-24T06:20:01.397 回答
0

C# 4.0 实现了一个称为泛型协方差的特性:

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

这允许将 List< DirectoryPatternToken > 视为 List< Token >,因为 DirectoryPatternToken 派生自 Token。由于 C# 3.5 没有此功能,因此您必须使用这些行来编译代码:

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

private static List<String> GetReportValues(List<DirectoryPatternToken> TokenList)
于 2013-05-15T16:23:33.710 回答
0
 List<DirectoryPatternToken> tokens = 
             settings.DirectoryDefinition.NameTokens.OrderBy(x => x.Index).ToList();
 List<string> pathValues = GetReportValues(tokens);

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

于 2013-05-15T15:53:54.477 回答