C# 我可以使用泛型类型参数作为返回类型吗?

C# 我可以使用泛型类型参数作为返回类型吗?,c#,generics,return-type,C#,Generics,Return Type,如果我有一个带有一个或多个泛型参数的接口 interface IFoo<T1, T2> {} 接口IFoo{} …是否可以在将其作为参数的方法的返回类型中引用其一个或多个泛型参数类型 static IFoo.T2 Grab(IFoo<T1, T2> foo) { // TODO: return something. } 静态IFoo.T2抓取(IFoo-foo) { //托多:归还一些东西。 } 这取决于您如何定义类中的T1和T2。您有两个机会: 使包含静态

如果我有一个带有一个或多个泛型参数的接口

interface IFoo<T1, T2> {}
接口IFoo{}
…是否可以在将其作为参数的方法的返回类型中引用其一个或多个泛型参数类型

static IFoo.T2 Grab(IFoo<T1, T2> foo)
{
    // TODO: return something.
}
静态IFoo.T2抓取(IFoo-foo)
{
//托多:归还一些东西。
}

这取决于您如何定义类中的
T1
T2
。您有两个机会:

  • 使包含静态方法的类成为泛型:

    class MyClass<T1, T2>
    {
        static T2 Grab(IFoo<T1, T2> foo) { ... }
    }
    
    class-MyClass
    {
    静态T2抓取(ifoofoo){…}
    }
    
  • 仅将方法本身设置为泛型:

    static T2 Grab<T1, T2>(IFoo<T1, T2> foo) { ... }
    
    statict2grab(ifoofoo){…}
    

  • 在这两种情况下,您都不能简单地使用
    IFoo
    中的泛型参数,因为实际上没有该接口的实例。即使您有这样一个实例,它也与您的方法无关

    这取决于你如何在课堂上定义
    T1
    T2
    。您有两个机会:

  • 使包含静态方法的类成为泛型:

    class MyClass<T1, T2>
    {
        static T2 Grab(IFoo<T1, T2> foo) { ... }
    }
    
    class-MyClass
    {
    静态T2抓取(ifoofoo){…}
    }
    
  • 仅将方法本身设置为泛型:

    static T2 Grab<T1, T2>(IFoo<T1, T2> foo) { ... }
    
    statict2grab(ifoofoo){…}
    

  • 在这两种情况下,您都不能简单地使用
    IFoo
    中的泛型参数,因为实际上没有该接口的实例。即使您有这样一个实例,它也与您的方法无关

    static T2 Grab(IFoo foo)
    ?为了使该参数声明有效,
    Grab
    必须已经位于一个类中,该类(至少)
    T1
    T2
    作为声明的类型参数。因此,只需使用
    T2
    。方法或其封闭类也必须是泛型的。例如
    statict-Grab(IFoo-foo)
    作为使方法通用的示例。或者只需确定类型参数,比如
    static int Grab(IFoo-foo)
    。或者使用一个类型参数使其成为泛型,
    static T Grab(IFoo foo)
    ,这可能是最接近问题的。
    static T2 Grab(IFoo foo)
    ?为了使该参数声明有效,
    Grab
    必须已经在一个类中,并且(至少)
    T1
    T2
    作为声明的类型参数。因此,只需使用
    T2
    。方法或其封闭类也必须是泛型的。例如
    statict-Grab(IFoo-foo)
    作为使方法通用的示例。或者只需确定类型参数,比如
    static int Grab(IFoo-foo)
    。或者使用一个类型参数使其通用化,
    static T Grab(IFoo-foo)
    ,这可能是最接近问题的。