Используйте SiriKit для возврата результатов поиска

Конечно, другие ответы совершенно правильны, но я написал свою версию в соответствии с моими потребностями:

/// 
/// An equality comparer that compares objects for reference equality.
/// 
/// The type of objects to compare.
public sealed class ReferenceEqualityComparer : IEqualityComparer
    where T : class
{
    #region Predefined
    private static readonly ReferenceEqualityComparer instance
        = new ReferenceEqualityComparer();
    /// 
    /// Gets the default instance of the
    ///  class.
    /// 
    /// A  instance.
    public static ReferenceEqualityComparer Instance
    {
        get { return instance; }
    }
    #endregion

    /// 
    public bool Equals(T left, T right)
    {
        return Object.ReferenceEquals(left, right);
    }

    /// 
    public int GetHashCode(T value)
    {
        return RuntimeHelpers.GetHashCode(value);
    }
}

Обоснование дизайна:

  • Класс sealed. Если класс не предназначен для расширения, я собираюсь избежать всех этих расходов, запечатывая его. Эрик Липперт Я знаю многих людей (включая меня), которые считают, что классы действительно должны быть запечатаны default.- Jon Skeet
  • Существует статическое свойство Instance для чтения только для чтения , чтобы выставить один экземпляр этого класса.
  • Он использует Object.ReferenceEquals() вместо ==, потому что ReferenceEquals более явный.
  • Он использует RuntimeHelpers.GetHashCode(), потому что я не хочу использовать возможно переопределенный GetHashCode объекта , что может не соответствовать поведению ReferenceEquals. Это также позволяет избежать нулевой проверки.
  • Имеет документацию.

0
задан kristoferchris 7 May 2019 в 20:58
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: