如何使用两个泛型类型参数声明一个Method?

时间:2012-12-21 12:03:40

标签: c# .net generics

是否可以对函数返回值执行不同的通用参数类型(U),同时为本地参数设置另一个通用参数类型T

我试过了:

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);  

      ...
}

5 个答案:

答案 0 :(得分:9)

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);
}

答案 1 :(得分:5)

这应该有用。

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

答案 2 :(得分:2)

这有效:

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

Loook at MSDN

答案 3 :(得分:1)

好的,在阅读完所有评论后,我觉得你有两种选择......

  1. 在someMethodParent的正文中明确指定someMethod所需的返回类型

    public static T someMethodParent<T>(Stream stream)
    {
        TheTypeYouWant something = someMethod<T, TheTypeYouWant>(type1, stream);
        ...
        return Default(T);
    }
    
  2. 在someMethodParent的主体中使用object作为someMethod的返回类型,但是你仍然需要强制转换为可用的类型

    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);
    }
    
  3. 其中两个在其他答案的评论中提到,但没有例子。

答案 4 :(得分:0)

为了在someMethodParent中使用U,必须像在someMethod中那样指定它,例如。

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

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

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