3

我有一个DirectoryToken从类继承的对象Token。在我的代码中,我有一个GetValues方法,它接受一个令牌列表,并根据令牌对象中包含的信息将列表中每个项目的值放在一起。

//NameTokens is an object of type **List<DirectoryToken>**
List<String> PathValues = GetValues((IEnumerable<Token>)settings.DirectoryDefinition.**NameTokens**.OrderBy(x => x.Index));


private List<String> GetReportValues(IEnumerable<Token> TokenList)
{

}

我注意到当我在一台机器(Windows 7、.NET 3.5)上运行代码时,它运行良好。但是,当我将构建的 msi 移动到另一台机器并尝试运行相同的测试时,我收到以下错误消息。

无法转换类型为“System.Linq.OrderedEnumerable 2[DirectoryToken,System.Int32]' to type 'System.Collections.Generic.IEnumerable1[Token]”的对象。

我不认为更改代码是解决此问题的正确方法。任何建议这个问题可能来自什么,也许我可以将我的 3.5 更新到哪个版本来解决这个问题?

4

2 回答 2

4

您正在尝试将 的集合转换为DirectoryToken的集合Token

这称为协变转换,仅在 .Net 4.0 或更高版本中受支持。

如果您无法升级,您可以调用.Cast<Token>()创建一个新IEnumerable<T>实例(实际上是一个迭代器),将每个对象转换为所需的类型。

在任何情况下,您都不需要显式转换操作。

于 2013-06-12T17:36:11.160 回答
2

对,还没有。

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

将工作。

这是因为虽然DirectoryTokenTokenIEnumerable<DirectoryToken>不是。你不能直接施法。IEnumerable<Token>

于 2013-06-12T17:37:16.580 回答