如何声明具有两个泛型类型参数的方法
本文关键字:两个 方法 泛型类型参数 何声明 声明 | 更新日期: 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)
语法正确。
正如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
好的,看了所有的评论后,在我看来你有两个选择…
-
在someemethodparent
的主体中显式指定您需要从someemethod返回的类型public static T someMethodParent<T>(Stream stream) { TheTypeYouWant something = someMethod<T, TheTypeYouWant>(type1, stream); ... return Default(T); }
-
在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);
}