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

max*_*axp 5 c# generics type-inference

如果我有这个方法

void foo<T>(T bar){}
Run Code Online (Sandbox Code Playgroud)

我可以这样成功地调用它:

string s = string.Empty;
foo(s);
Run Code Online (Sandbox Code Playgroud)

我想象编译器/运行时可以推断出类型,

但是,如果我将方法更改为:

T foo<T,T2>(T2 bar){...}
Run Code Online (Sandbox Code Playgroud)

然后我必须在'full'中调用它,同时指定输入参数类型和返回类型:

string s = string.Empty;
foo<int,string>(s);
Run Code Online (Sandbox Code Playgroud)

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

foo<int>(s);
Run Code Online (Sandbox Code Playgroud)

谢谢

Sim*_*wen 3

你总是可以将你的方法重写为:

void foo<T, U>(U bar, out T baz)
{
    baz = default(T);
}
Run Code Online (Sandbox Code Playgroud)

如果你真的想要类型推断......现在:

string s = string.Empty;
int i;

foo(s, out i);
Run Code Online (Sandbox Code Playgroud)

会工作得很好。

另外,请参阅:这个问题,埃里克·利珀特(Eric Lippert)对为什么你不能拥有你想要的东西做出了很好的回答!

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

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

简单地说...不。