Ответ 1
Вы можете использовать условный оператор (?:)
[DebuggerDisplay("{GetType().Name,nq}: FileName = {FileName,nq}{IsTempFile ? \", TempFileName: \" + TempFileName : System.String.Empty,nq}")]
IsTempFile == false
IsTempFile == true
Рассмотрим следующий класс:
[DebuggerDisplay("{GetType().Name,nq}: FileName = {FileName,nq}")]
public class FileWrapper
{
public string FileName { get; set; }
public bool IsTempFile { get; set; }
public string TempFileName { get; set; }
}
Я хотел бы добавить отображение отладчика на основе свойства IsTempFileName
. Я хотел бы добавить строку , TempFileName = {TempFileName,nq}
, когда экземпляр является временным файлом. Как я могу это сделать?
Вы можете использовать условный оператор (?:)
[DebuggerDisplay("{GetType().Name,nq}: FileName = {FileName,nq}{IsTempFile ? \", TempFileName: \" + TempFileName : System.String.Empty,nq}")]
IsTempFile == false
IsTempFile == true
Вы можете использовать любое выражение.
Однако имейте в виду, что отладчик очень сильно оценит эти выражения, поэтому чем сложнее вы их сделаете, тем больше вы начнете замечать уменьшенную скорость отладки (например, при переходе по коду).
Еще одна важная вещь, которую следует учитывать, заключается в том, что выражение оценивается отладчиком для языка, использующего класс. Если класс и все его потенциальные пользователи находятся на С#, нет проблем, и вы можете использовать такие вещи, как троичный оператор. Однако, если ваш класс также должен использоваться с другого языка, то:
Самым безопасным было бы добавить частное свойство для вычисления значения отладчика:
[DebuggerDisplay("{DebugValue,nq}")]
public class FileWrapper {
public string FileName { get; set; }
public bool IsTempFile { get; set; }
public string TempFileName { get; set; }
private string DebugValue {
get {
var text = string.Format("{0}: FileName={1}", this.GetType(), this.FileName);
if (this.IsTempFile)
text += string.Format(", TempFileName={0}", this.TempFileName);
return text;
}
}
}
Это частная собственность, поэтому она не мешает каким-либо потенциальным подклассам.