可选的通用参数

时间:2017-10-23 12:56:55

标签: c# generics parameters

我需要为函数使用可选的泛型参数。这将是没有泛型参数的正常函数:

void MyFunction (string myText, int optionalParameter = 0)
{
 //Do something
}

我需要的是:

void MyFunction<T> (string myText, T optionalGenericParameter = default(T))
{
  //Do something
}

不幸的是,default(T)的初始化引发了以下错误“无法从用法中推断出来。请尝试明确指定类型参数。”

3 个答案:

答案 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");