【发布时间】:2018-09-03 09:21:02
【问题描述】:
问题与实体框架和内存排序有关。
阅读本文
https://docs.microsoft.com/en-us/dotnet/api/system.icomparable.compareto?view=netframework-4.7.2
如果类不是同一类型(或者,看起来比较的类不是可比较类的实例),我应该抛出异常。
我使用GetType().IsInstanceOfType(obj)) 来确定是否应该按照API 规范的要求抛出InvalidArgumentException。
我有两节课
public class MyClass : IComparable
{
// ...
}
public class MyClassProxy : MyClass
{
// This class rappresent an EF proxy
// ...
}
应用 API 规范,MyClass.CompareTo(MyClassProxy) 应该可以正常工作,而 MyClassProxy.CompareTo(MyClass) 应该不能正常工作。
问题是,在这种情况下,我应该完全尊重 API 定义,还是应该部分释放关于类型的 API 约束,并且如果该类是可比较类的代理,则不抛出异常?
如果我释放约束,检查类型兼容性的正确方法是什么?
【问题讨论】:
-
“应用 API 规范,MyClass.CompareTo(MyClassProxy) 应该可以正常工作” - 这听起来不像。 “obj 与此实例的类型不同。”在这种情况下不正确,因此抛出 ArgumentException, IMO 是有意义的。我会在这里使用
GetType() != obj.GetType()。 -
@JonSkeet,API 规范中的示例适用于派生类。我认为API规范中
is这个词必须缩进为c#is关键字。 -
我认为这是实现中的一个错误。请注意,稍后它会说:“参数 obj 必须与实现此接口的类或值类型相同;否则,将引发 ArgumentException。”那句话中甚至没有“是”这个词。非对称实现非常令人困惑。
标签: c# entity-framework