C#:有一个“可选”参数,默认情况下使用所需参数的值

时间:2010-08-27 07:16:01

标签: c# nullable

如何为函数实现“可选”参数,以便在未给出endMarker时,我将使用所需参数startMarker中的值?我目前使用可空类型并检查endMarker是否为null我将其设置为startMarker

protected void wrapText(string startMarker, string? endMarker = null) { 
    if (endMarker == null)
        endMarker = startMarker; 
}

但现在的问题是我收到一条错误,说它无法将string?投射到string

(string)endMarker

如何将endMarker投射到string以便我可以使用它?还是有更好的方法来实现这个?

3 个答案:

答案 0 :(得分:16)

这将有效:

protected void wrapText(string startMarker, string endMarker = null) { 
    if (endMarker == null)
        endMarker = startMarker; 
}

换句话说:从string?中删除问号。 System.String是引用类型,可以是nullNullable<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;
    }
}