Есть ли компактный способ сообщить компилятору C # использовать базовый оператор Equals и ==?

Я новичок в C #, и у меня есть опыт работы на C ++.

Я определил структуру, и компилятор (Microsoft) продолжает выявлять ошибку CA1815 «'GenericSendRequest' должен переопределить Equals»

Я немного прочитал и увидел, что структуры C # являются производными от ValueType, который реализует общий Equals используя отражение.Это еще больше сбило меня с толку:

  1. Почему компилятор создает ошибку вместо предупреждения, если это всего лишь проблема производительности?
  2. Почему он в первую очередь определяет этот общий Equals, если он не позволит вам его использовать?

Так как я могу сказать компилятору, что «мне все равно»? Нечто подобное просто с объявлением оператора присваивания в классе C ++ без предоставления определения, подтверждающего, что я знаю, что делаю.

До сих пор мое решение заключалось в том, чтобы включить:

    public static bool operator ==(GenericSendRequest lhs, GenericSendRequest rhs)
    {
        return lhs.Equals(rhs);
    }

    public static bool operator !=(GenericSendRequest lhs, GenericSendRequest rhs)
    {
        return !lhs.Equals(rhs);
    }

    public override bool Equals(object obj)
    {
        return base.Equals(obj);
    }

    //Yes, it also makes me override GetHashCode since I'm overriding Equals.
    public override int GetHashCode()
    {
        return base.GetHashCode();
    }

в мою структуру, что просто ужасно.

Изменить: Это определение структуры:

public struct GenericSendRequest
{
        public LiveUser             Sender;
        public LiveUser[]           Receivers;
        public Message              Msg;
        public ServiceHttpRequest   HttpRequest;
}

Его использование - это просто несколько возвращаемых значений из функции:

public static GenericSendRequest CreateGenericSendRequest(...);
9
задан Ramon Zarazua B. 27 September 2011 в 02:21
поделиться