在c#中调用泛型方法时的简写

时间:2011-12-09 11:07:07

标签: c# generics type-inference

如果我有方法

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

由于

2 个答案:

答案 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的优秀答案,了解为什么你不能拥有你想要的东西!

编辑:我意识到我实际上没有回答你的问题......

  

有没有办法我可以简写这个,所以我不需要指定   输入参数类型?

简单地说......不。