Буква 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;
Другие вопросы по тегам