是否可以对函数返回值执行不同的通用参数类型(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);
...
}
答案 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)
答案 3 :(得分:1)
好的,在阅读完所有评论后,我觉得你有两种选择......
在someMethodParent的正文中明确指定someMethod所需的返回类型
public static T someMethodParent<T>(Stream stream)
{
TheTypeYouWant something = someMethod<T, TheTypeYouWant>(type1, stream);
...
return Default(T);
}
在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);
}
其中两个在其他答案的评论中提到,但没有例子。
答案 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);
}