Я довольно плохо знаком с C # и пришел из C ++.
Я определил структуру, и компилятор (Microsoft) продолжает выдавать сообщение об ошибке CA1815 «GenericSendRequest должен переопределить Equals»
Я немного прочел и увидел, что структуры C # происходят от ValueType, который реализует универсальный метод Equals с использованием отражения. Это смутило меня больше:
- Почему компилятор создает ошибку вместо предупреждения, если это просто проблема производительности?
- Почему он вообще определяет этот общий 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();
}
в моей структуре, которая просто ужасна.
Edit:
Это определение структуры:
public struct GenericSendRequest
{
public LiveUser Sender;
public LiveUser[] Receivers;
public Message Msg;
public ServiceHttpRequest HttpRequest;
}
Он использует только несколько возвращаемых значений из функции:
public static GenericSendRequest CreateGenericSendRequest(...);