Свойства использовать if — else на set? или на get?

#c# #class #dependency-properties

#c# #класс #зависимость-свойства

Вопрос:

Это вопрос производительности, я использую класс, подобный приведенному ниже примеру: у меня есть два свойства Status и Price.

 public class Customers
{
    public bool Status {get; set;} 
    public string Price {get; set;} 

}
 

Итак, я в замешательстве, мне нужно проверить, является ли статус true или false, а затем вернуть формат строки в price. Мой вопрос в том, какой из двух методов имеет лучшую производительность. Или если производительность незначительна.

#Пример 1

 public class Customers
{
    public bool Status {get; set;} 
    public string Price
    {
          return status ? 
             string.Format("{0:0.00}", Price)   "€" :
             "Item Status is False";
    }

}
 

#Пример 2

 public class Customers
{
    private string priceAsString;

    public bool Status {get; set;} 
    public string Price
    {
        get
        {
            return priceAsString;
        }
        set
        {
            priceAsString= Status?
                string.Format("{0:0.00}", Price)   "€" :
                "Item Status is False";
        }
    }

}
 

Комментарии:

1. ericlippert.com/2012/12/17/performance-rant

2. Второй вариант вообще не имеет смысла.

3. Первый способ выглядит как ожидающее возникновения исключения stackoverflow

4. В вашем втором примере, что вы ожидаете, произойдет, если статус изменится после Price установки? Однако ваш первый пример также не компилируется, так что ни один из них явно не лучше. Как и в связанном сообщении, предпочитайте простой , корректно работающий код, прежде чем беспокоиться о производительности.

5. Комментарий ко второму решению: что такое, если Status изменения после Price установки? Производительность в этих двух примерах действительно незначительна. Вы должны выбрать более читаемый и более удобный в обслуживании… итак, вам следует перейти на версию 1. В качестве дополнительного примечания: код первой версии не компилируется.