如何声明具有两个泛型类型参数的方法

本文关键字:两个 方法 泛型类型参数 何声明 声明 | 更新日期: 2023-09-27 17:49:23

是否有可能做一些事情,比如为函数返回值具有不同的通用参数类型(U),而已经为局部参数具有另一个通用参数类型T ?

I have try:

private static U someMethod <T,U>(T type1, Stream s)

private static U someMethod <T><U>(T type1, Stream s)
编辑:

我们同意尝试:

private static U someMethod <T,U>(T type1, Stream s)
public static T someMethodParent<T>(Stream stream)
{
   U something = someMethod(type1, stream);  
      ...
}

如何声明具有两个泛型类型参数的方法

private static U someMethod <T,U>(T type1, Stream s)语法正确。

http://msdn.microsoft.com/en-us/library/twcad0zb%28v=vs.80%29.aspx

正如JavaSa在注释中所述,如果不能从用法中推断出实际类型,则需要提供实际类型,因此

private static U someMethodParent<T>(T Type1, Stream s)
{
    return someMethod<T, ConcreteTypeConvertibleToU>(type1, s);
}

应该可以。

private static U someMethod<T, U>(T type1, Stream s)
{
   return default(U);
}

这行得通:

private static TOutput someMethod<TInput, TOutput>(TInput from);

看MSDN

好的,看了所有的评论后,在我看来你有两个选择…

  1. 在someemethodparent

    的主体中显式指定您需要从someemethod返回的类型
    public static T someMethodParent<T>(Stream stream)
    {
        TheTypeYouWant something = someMethod<T, TheTypeYouWant>(type1, stream);
        ...
        return Default(T);
    }
    
  2. 在someemethodparent的主体中使用object作为someemethod的返回类型,但是你仍然需要转换为一个可用的类型

    public static T someMethodParent<T>(Stream stream)
    {
        object something = someMethod<T, object>(type1, stream);
        ...
        TheTypeYouNeed x = (TheTypeYouNeed) something;
        // Use x in your calculations
        ...
        return Default(T);
    }
    

这两个都在其他答案的评论中提到,但没有例子

为了在someemethodparent中使用U,它必须被指定,就像你在someemethod中所做的那样,例如

public static T someMethodParent<T, U>(T type1, Stream stream)

现在我可以在方法体中使用U作为someemethod的返回类型…

{
    U something = someMethod<T, U>(type1, stream);
    return Default(T);
}