【发布时间】:2009-09-03 18:59:08
【问题描述】:
我正在尝试使用代码调用需要IComparer<object> 类型参数的“排序”方法:
collection.Sort((IComparer<object>)Comparer<DateTime>.Default)
它会构建,但在运行时我会收到 InvalidCastException 消息:
Unable to cast object of type
'System.Collections.Generic.GenericComparer`1[System.DateTime]'
to type 'System.Collections.Generic.IComparer`1[System.Object]'.
现在呢?
【问题讨论】:
-
请张贴“收藏”声明。我们需要更多信息来提供帮助。
-
这是一个 LLBL 集合,即 SD.LLBLGen.Pro.ORMSupportClasses.EntityCollectionBase2
(现在你很抱歉你问了 :) -
您需要一个自定义比较器 - 如果类型始终是 DateTIme 值,那么我刚刚添加的应该可以工作(只需 5 行额外的代码)
-
... 另外,不,这在 C# 4.0 中也不起作用(因为,虽然
IComparer<T>是逆变的,但它不会是协变的 - 并且此代码试图将其视为协变)。 -
@Pavel:还因为 DateTime 是一种值类型,并且方差仅适用于引用类型:)
标签: c# generics llblgenpro