如何为函数实现“可选”参数,以便在未给出endMarker
时,我将使用所需参数startMarker
中的值?我目前使用可空类型并检查endMarker
是否为null我将其设置为startMarker
protected void wrapText(string startMarker, string? endMarker = null) {
if (endMarker == null)
endMarker = startMarker;
}
但现在的问题是我收到一条错误,说它无法将string?
投射到string
(string)endMarker
如何将endMarker
投射到string
以便我可以使用它?还是有更好的方法来实现这个?
答案 0 :(得分:16)
这将有效:
protected void wrapText(string startMarker, string endMarker = null) {
if (endMarker == null)
endMarker = startMarker;
}
换句话说:从string?
中删除问号。 System.String
是引用类型,可以是null
。 Nullable<T>
结构只能用于值类型。
答案 1 :(得分:2)
您需要重载方法才能在没有“optional”参数的情况下进行调用。然后在这个方法中,你只需要调用普通方法两次传递相同的参数:
protected void wrapText(String startMarker, String endMarker)
{
// do stuff
}
protected void wrapText(String startMarker)
{
wrapText(startMarker, startMarker);
}
答案 2 :(得分:-3)
你不能只做这样的事情:
protected void wrapText(string startMarker, string? endMarker = null) {
if (endMarker == null)
{
endMarker = "foo";
endMarker = startMarker;
}
}