如果我有方法
void foo<T>(T bar){}
我可以成功地这样称呼它:
string s = string.Empty;
foo(s);
我认为编译器/运行时可以推断出类型,
但是,如果我将方法更改为:
T foo<T,T2>(T2 bar){...}
然后我必须在'full'中调用它,同时指定输入参数类型和返回类型:
string s = string.Empty;
foo<int,string>(s);
有没有办法我可以简写这个,所以我不需要指定输入参数类型? 即。
foo<int>(s);
由于
答案 0 :(得分:3)
不幸的是,编译器无法从使用中推断示例中的T
。只要它不能自动完成,您需要提供它。
C#中没有“可选”类型参数,也没有缩写。
答案 1 :(得分:3)
您可以随时将方法重写为:
void foo<T, U>(U bar, out T baz)
{
baz = default(T);
}
如果你真的想要类型推断......现在:
string s = string.Empty;
int i;
foo(s, out i);
工作得很好。
另外,请参阅:this question获得Eric Lippert的优秀答案,了解为什么你不能拥有你想要的东西!
编辑:我意识到我实际上没有回答你的问题......有没有办法我可以简写这个,所以我不需要指定 输入参数类型?
简单地说......不。