Я искал переопределяющие инструкции для структур, но все, что я могу найти, для классов.
Сначала я думал, что не должен буду проверять, чтобы видеть, был ли переданный объект несуществующим, как структуры являются типами значения и не могут быть пустыми. Но теперь, когда я задумываюсь о нем, как равняется подписи,
public bool Equals(object obj)
кажется, что нет ничего предотвращающего пользователя моей структуры, чтобы попытаться сравнить его с произвольным ссылочным типом.
Мое второе замечание касается кастинга I (думайте I), должны сделать, прежде чем я сравню свои частные поля в моей структуре. Как я, как предполагается, бросаю объект к типу своей структуры? C# as
ключевое слово кажется только подходящим для ссылочных типов.
struct MyStruct
{
public override bool Equals(object obj)
{
if (!(obj is MyStruct))
return false;
MyStruct mys = (MyStruct) obj;
// compare elements here
}
}
Добавление к существующим ответам.
Если вы добавите? после имени структуры (это работает для каждого объекта значения)
int?
Приведение также выполняется путем вызова (MyStructName) variableName
Используйте оператор is
:
public bool Equals(object obj)
{
if (obj is MyStruct)
{
var o = (MyStruct)obj;
...
}
}