我有一个目前看起来像这样的类:
public Action<string> Callback { get; set; }
public void function(string, Action<string> callback =null)
{
if (callback != null) this.Callback = callback;
//do something
}
现在我想要的是采用一个可选参数,例如:
public Action<optional, string> Callback { get; set; }
我试过:
public Action<int optional = 0, string> Callback { get; set; }
它不起作用。
有什么办法可以让Action<...>
接受一个可选参数?
你不能用 System.Action<T1, T2>
来做到这一点, 但您可以像这样定义自己的委托(delegate)类型:
delegate void CustomAction(string str, int optional = 0);
然后像这样使用它:
CustomAction action = (x, y) => Console.WriteLine(x, y);
action("optional = {0}"); // optional = 0
action("optional = {0}", 1); // optional = 1
不过,请注意一些关于此的事情。
- 就像在普通方法中一样,必需参数不能跟在可选参数之后,所以我不得不在这里颠倒参数的顺序。
- 默认值是在定义委托(delegate)时指定的,而不是在声明变量实例的地方指定的。
您可以将此委托(delegate)设为通用,但很可能您只能使用 default(T2)
对于默认值,像这样:
delegate void CustomAction<T1, T2>(T1 str, T2 optional = default(T2));
CustomAction<string, int> action = (x, y) => Console.WriteLine(x, y);