在c#中调用泛型方法时的速记

本文关键字:泛型方法 调用 | 更新日期: 2023-09-27 18:17:32

如果我有

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

谢谢

在c#中调用泛型方法时的速记

您可以将您的方法重写为:

void foo<T, U>(U bar, out T baz)
{
    baz = default(T);
}

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

string s = string.Empty;
int i;
foo(s, out i);

就可以了。

另外,请参阅Eric Lippert关于为什么你不能得到你想要的东西的精彩答案。

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

是否有一种方法可以简化它,这样我就不需要指定输入参数类型?

简单地说……没有。

不幸的是,编译器无法从用法中推断出示例中的T。如果不能自动完成,则需要提供它。

c#中没有"可选"类型参数,也没有简写。