Можно ли использовать условия в DebuggerDisplay в VB.NET?

Я задаю вопрос, заданный здесь снова, потому что ответ не подходит для VB.NET:

Рассмотрим следующий класс:

[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}, когда экземпляр является временным файлом. Как бы мне этого добиться?

Как мне сделать это в VB.NET?

1 ответ

Решение

VB имеет свой собственный эквивалент C# ?: оператор в эти дни, т.е. If, Это может быть использовано в эквивалентном сценарии:

<DebuggerDisplay("{GetType(FileWrapper).Name,nq}: FileName = {FileName,nq}{If(IsTempFile, "", TempFileName: "" & TempFileName, System.String.Empty),nq}")>
Public Class FileWrapper

    Public Property FileName As String
    Public Property IsTempFile As Boolean
    Public Property TempFileName As String

End Class

Кажется, что GetType там интерпретируется как оператор VB, а не Object.GetType метод, так что вам нужно добавить тип в качестве аргумента тоже.

Также стоит проверить второй ответ в этой оригинальной теме. Я принимаю за чистую монету утверждение, которое он включает о компиляторе для вызывающего кода, который является тем, чтобы оценить предоставленное выражение. Это означает, что специфичное для C# или VB выражение в этом контексте завершится ошибкой, если тип используется кодом, написанным на другом языке.

Другие вопросы по тегам