我需要为函数使用可选的泛型参数。这将是没有泛型参数的正常函数:
void MyFunction (string myText, int optionalParameter = 0)
{
//Do something
}
我需要的是:
void MyFunction<T> (string myText, T optionalGenericParameter = default(T))
{
//Do something
}
不幸的是,default(T)
的初始化引发了以下错误“无法从用法中推断出来。请尝试明确指定类型参数。”
答案 0 :(得分:1)
如果不提供第二个参数,则必须在调用方法时指定类型。
// correct
MyFunction<SomeType>("hello");
// NOT correct
MyFunction("hello");
答案 1 :(得分:1)
我经常遇到这个问题,我所做的是......重载
void MyFunction (string myText)
{
MyFunction (myText, 0);
// this works because C# will infer T as being int
}
void MyFunction<T> (string myText, T optionalGenericParameter)
{
//Do something
}
/* usage example:
MyFunction("foo");
MyFunction("bar", new Tuple<string, int>("yay", 113));
// C# will infer that T is Tuple<string, int> here.
*/
答案 2 :(得分:0)
该错误告诉您编译器在调用方法时无法猜出类型T
是什么。如果您传入了optionalGenericParameter
的值,编译器就会知道该类型是什么。相反,您需要明确指定类型,例如:
MyFunction<string>("Hello world");