1

我有以下类和方法:

public class MyGenericClass<T>
    where T : class
{
}

public class MyClass
{
    public TGen MyMethod<TGen>(TGen myGenClass)
        where TGen : MyGenericClass<T>
        where T : class
    {
        return myGenClass;
    }
}

但是,这会产生错误,因为它无法解析TMyMethod 中的符号。我宁愿不必有,MyMethod<TGen, T>因为这对我来说似乎有点多余。这可能吗?

4

3 回答 3

3

您必须先指定T才能在定义中使用它。编译器无法知道是什么T

因此,您应该T在使用它之前指定(在方法级别如下,或者可能在类级别使用MyClass):

public class MyClass
{
    public TGen MyMethod<TGen, T>(TGen myGenClass)
        where TGen : MyGenericClass<T>
        where T : class
    {
        return myGenClass;
    }
}

您还可以在 where 子句中使用泛型类型的具体实现:

public class MyClass
{
    public TGen MyMethod<TGen>(TGen myGenClass)
        where TGen : MyGenericClass<DateTime>
    {
        return myGenClass;
    }
}
于 2012-04-19T16:06:05.710 回答
2

如果您希望能够为您的类型使用任何 MyGenericClass实现TGen,那么您将需要创建一个MyGenericClass要使用的实现的基类(当然,这限制了您将为您的TGen实例获得的功能。

 public class MyGenericClassBase { }
 public class MyGenericClass<T> : MyGenericClassBase { }
 public class MyClass<TGen> 
      where TGen: MyGenericClassBase
 {
     // Stuff
 }
于 2012-04-19T16:08:16.803 回答
1

听起来您只是忘记将T方法包含在泛型类型列表中:

public TGen MyMethod<TGen, T>(TGen myGenClass)
    where TGen : MyGenericClass<T>
    where T : class
{
    return myGenClass;
}
于 2012-04-19T16:03:58.520 回答