Did*_*xis 2 c# oop generics inheritance
假设您有以下Generic类heirarchy:
public abstract class GenericBase<T>
{
T SomeProperty{ get; set; }
}
public class Foo<T>
{
T SomeProperty{ get; set; }
}
public abstract class GenericChild<T> : GenericBase<T>
{
// ...
public bool DoSomething(Foo<T> foo)
{
// This is invalid:
return SomeProperty == foo.SomeProperty;
}
}
Run Code Online (Sandbox Code Playgroud)
DoSomething方法中的相等检查将无法编译.它会产生以下错误:
Operator '==' cannot be applied to operands of type 'T' and 'T'
Run Code Online (Sandbox Code Playgroud)
如果它是相关的,这些类是在单独的文件中.允许这种平等比较的最佳解决方法是什么?在C#中是否存在某种模式或某些东西?
更新:
一些答案建议使用:
where T : SomeClass
Run Code Online (Sandbox Code Playgroud)
不幸的是,T经常会是一种原始类型.
==并非一般适用于所有类型.它只能用于如果 T被约束到支持它,例如,如上所述类型where T : class.但是,使用该Equals方法可能会更好.
return SomeProperty.Equals(foo.SomeProperty);
Run Code Online (Sandbox Code Playgroud)
应用适用的空值检查.