C#通用类型参数跨类共享

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经常会是一种原始类型.

Ant*_*ram 8

==并非一般适用于所有类型.它只能用于如果 T被约束到支持它,例如,如上所述类型where T : class.但是,使用该Equals方法可能会更好.

return SomeProperty.Equals(foo.SomeProperty);
Run Code Online (Sandbox Code Playgroud)

应用适用的空值检查.