-1, альтернатива OP идентична в том смысле, что если свойство никогда не вызывается, то список никогда не создается. В этом смысле они оба "ленивы".

T 4 следующий фрагмент с кэшированным свойством также может быть написан с использованиемSystem.Lazy<T> класс. Я измерил производительность обоих подходов, и она почти одинакова. Есть ли какая-то реальная польза или магия, почему я должен использовать один над другим?

Кэшированное свойство

public static class Brushes
{
    private static LinearGradientBrush _myBrush;

    public static LinearGradientBrush MyBrush
    {
        get
        {
            if (_myBrush == null)
            {
                var linearGradientBrush = new LinearGradientBrush { ...};
                linearGradientBrush.GradientStops.Add( ... );
                linearGradientBrush.GradientStops.Add( ... );

                _myBrush = linearGradientBrush;
            }

            return _myBrush;
        }
    }
}

Ленивый <Т>

public static class Brushes
{
    private static readonly Lazy<LinearGradientBrush> _myBrush =
        new Lazy<LinearGradientBrush>(() =>
            {
                var linearGradientBrush = new LinearGradientBrush { ...};
                linearGradientBrush.GradientStops.Add( ... );
                linearGradientBrush.GradientStops.Add( ... );

                return linearGradientBrush;
            }
        );

    public static LinearGradientBrush MyBrush
    {
        get { return _myBrush.Value; }
    }
}

Ответы на вопрос(7)

Ваш ответ на вопрос