未指定T的泛型类的扩展

时间:2013-07-16 14:48:57

标签: c# generics

我有一个我想要在外部扩展的Generic类。

如果我在MyGenericClass<T>的班级内,我可以简单地定义一个类似

的方法
public MyReturnType MyMethod() 
{ 
    MyReturnType m; 
    //some code
    return m;
}

然后可以像往常一样使用myGenericClass.MyMethod();

来调用实例

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

以下内容无法编译:

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

因为无法推断出类型T.

以下编译:

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

然而,这需要我输入myGenericClass.MyMethod<MyT>();,更糟糕的是,MyMethod中的“T”没有约束与MyGenericClass中的“T”相同 - 两个泛型是独立的(并依赖于用户对类和函数使用相同的类型。)

如何正确申报?

由于 Haighstrom

1 个答案:

答案 0 :(得分:5)

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