未指定T的泛型类的扩展

Hai*_*rom 0 c# generics

我有一个我希望在外部扩展的Generic类.

如果我属于这个类MyGenericClass<T>,我可以简单地定义一个类似的方法

public MyReturnType MyMethod() 
{ 
    MyReturnType m; 
    //some code
    return m;
}
Run Code Online (Sandbox Code Playgroud)

然后可以像往常一样通过实例调用它 myGenericClass.MyMethod();

但是,我想使用扩展在外部添加此功能.

以下内容无法编译:

public static MyReturnType MyMethod(this MyGenericClass<T> mgc)
{
    MyReturnType m; 
    //some code
    return m;
}
Run Code Online (Sandbox Code Playgroud)

因为无法推断出类型T.

以下编译:

public static MyReturnType MyMethod<T>(this MyGenericClass<T> mgc)
{
    MyReturnType m; 
    //some code
    return m;
}
Run Code Online (Sandbox Code Playgroud)

但是,这需要我键入myGenericClass.MyMethod<MyT>();,更糟糕的是,MyMethod中的"T"没有约束与MyGenericClass中的"T"相同 - 两个泛型是独立的(并且依赖于两个类使用相同类型的用户)和功能).

我该如何正确申报?

谢谢Haighstrom

Jus*_*ner 5

你的最后一个定义是正确的.您T在方法声明和类型参数中使用的事实意味着在两种情况下约束的类型都相同(意味着您不能跨越类型).