现在这个让我难过,所以我很感激你的帮助。我在.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; }
DirectoryDefinition.NameTokens 对象是一个包含从Token类派生的对象的列表。 GetReportValues只需要一个令牌列表,其中包含DirectoryDefinition
[Serializable]
public class DirectoryPatternToken : Token
{
}
正如我之前解释的那样,这在.NET 4.0中测试得很好。我怎么能在3.5中使用这个?提前致谢
答案 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指令,您向编译器指示应该导入该命名空间中的任何扩展方法。