Лучшие практики: свойство, функция или ToString? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь определить наилучшую практику при написании кода для получения строкового представления пользовательского класса.

Представьте, что у нас есть следующее:

public class DoubleParameter
{
    public double Value { get; set; }
    public string Description { get; set; }
    public string Units { get; set; }
}

И нам нужна возможностьчтобы получить строковое представление класса для целей отладки.Что касается читаемости / удобства сопровождения кода и рекомендаций, я оцениваю три варианта

  1. Встроенное свойство
  2. Пользовательский метод
  3. Переопределение ToString ()

Большинство из них очень похожи с точки зрения компилятора - но есть ли какие-либо объективные причины для предпочтения какого-либо конкретного варианта с точки зрения удобочитаемости / удобства сопровождения?Или это вопрос личных предпочтений?

Примеры использования:

// Option 1 - Inline Property
public string ReadableValue => 
    $"{this.Description} => {this.Value.ToString("F2")} ({this.Units})";
// example usage: Console.WriteLine(myVar.ReadableValue);

// Option 2 - Custom Method
public string ToReadable() =>
    $"{this.Description} => {this.Value.ToString("F2")} ({this.Units})";
// example usage: Console.WriteLine(myVar.ToReadable());

// Option 3 - Overriding ToString()
public override string ToString() =>
    $"{this.Description} => {this.Value.ToString("F2")} ({this.Units})";
// example usage: Console.WriteLine(myVar);

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Я советую вам сделать свойство частным и использовать его внутри как значение для атрибута [DebuggerDisplayAttribute], например:

[DebuggerDisplay("{ReadableValue},nq")] public class DoubleParameter { private string ReadableValue { get; } }

0 голосов
/ 05 декабря 2018

Большое спасибо за все ваши комментарии.

Я нахожусь в очереди большинства из вас: используйте ToString(), и приятно знать, что я не одинок.Но, в конце концов, кажется, что мы собираемся «сохранить» его для последующих целей регистрации.

@ LarsTech: Спасибо за издание, намного понятнее;)

0 голосов
/ 04 декабря 2018

В целях отладки ToString () выигрывает.

Почему?Потому что, когда вы шагаете по коду с помощью VisualStudio, VS легко отобразит результаты ToString (), когда вы наведете курсор на переменную или поместите переменную в окно просмотра.В противном случае, вам нужно покопаться, чтобы получить интересующую вас недвижимость.Это может быть особенно раздражающим, если вы работаете со списками / перечислениями и т. Д.

Кроме того, ToString () уже существует и уже предполагается как текстовое представление экземпляраваш объект.В этом весь смысл.Зачем добавлять другое свойство, которое также строковое представление вашего объекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...