C #: иметь «необязательный» параметр, который по умолчанию использует значение обязательного параметра - PullRequest
4 голосов
/ 27 августа 2010

Как я могу реализовать «необязательный» параметр для функции, чтобы, когда endMarker не задано, я использовал значение из обязательного параметра startMarker?в настоящее время я использую тип NULL и проверяю, имеет ли значение endMarker значение NULL, я устанавливаю его на startMarker

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

, но теперь проблема заключается в том, что он не может привести string? в string

(string)endMarker

как я могу разыграть endMarker в string, чтобы я мог его использовать?или есть лучший способ реализовать это?

Ответы [ 3 ]

16 голосов
/ 27 августа 2010

Это будет работать:

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

Другими словами: уберите знак вопроса с string?. System.String является ссылочным типом и уже может быть null. Структура Nullable<T> может использоваться только для типов значений.

2 голосов
/ 27 августа 2010

Вам нужно перегрузить метод, чтобы вызвать вызов без «необязательного» параметра.Затем в этом методе вы просто вызываете обычный метод, передавая один и тот же параметр дважды:

protected void wrapText(String startMarker, String endMarker) 
{  
    // do stuff 
} 


protected void wrapText(String startMarker) 
{  
    wrapText(startMarker, startMarker);
} 
0 голосов
/ 27 августа 2010

Разве вы не можете просто сделать что-то вроде этого:

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