Буква C# по умолчанию всегда возвращает False, .Equals()
Как я могу сравнить ValueType
использование литерала по умолчанию?
Я пробовал это, но это возвращает _darkBlue.Equals(default)
всегда возвращается false
:
static Color _darkBlue;
public static Color DarkBlue => _darkBlue.Equals(default) ? (_darkBlue = Color.FromHex("2980b9")) : _darkBlue;
Замечания: Color
в этом примере Xamarin.Forms.Color
Изменить: Образец репродукции: https://github.com/brminnick/ColorEqualsRepro
1 ответ
Решение
Оказывается, проблема была с .Equals
, Компилятор интерпретирует .Equals(default)
как .Equals(default(object))
,
изменения .Equals
в ==
исправил проблему.
public static Color DarkBlue => _darkBlue == default ? (_darkBlue = Color.FromHex("2980b9")) : _darkBlue;
Другое решение заключается в использовании .Equals(default(Color))
public static Color DarkBlue => _darkBlue.Equals(default(Color)) ? (_darkBlue = Color.FromHex("2980b9")) : _darkBlue;
Другое решение, использующее Color.IsDefault
public static Color DarkBlue => _darkBlue.IsDefault ? (_darkBlue = Color.FromHex("2980b9")) : _darkBlue;