Я нашел плагин, который помог мне сделать это за считанные секунды без редактирования кода:
https://wordpress.org/plugins/quick-pagepost-redirect-plugin/
Я нашел его здесь: http://premium.wpmudev.org/blog/wordpress-link-title-external-url/
Я использую ReSharper для генерации элементов равенства. При желании он будет реализовывать IEquatable
, а также операторы переопределения, если вы этого хотите (чего вы, конечно, никогда не делаете, но в любом случае это круто).
Реализация Equals включает переопределение ] Object.Equals (Object)
, а также вариант со строгой типизацией (который позволяет избежать ненужной проверки типов). Менее типизированная версия вызывает строго типизированную версию после выполнения проверки типа. Строго типизированная версия выполняет проверку равенства ссылок ( Object.ReferenceEquals (Object, Object)
), а затем сравнивает значения всех полей (ну, только тех, которые вы указываете генератору включить).
Что касается GetHashCode
, интеллектуальная факторизация значений поля GetHashCode
объединяется (с использованием снятого флажка
, чтобы избежать исключений переполнения, если вы используете компилятора] отмечен вариант
). Каждое из значений поля (кроме первого) перед объединением умножается на простые числа. Вы также можете указать, какие поля никогда не будут нулевыми, и при этом будут отброшены все нулевые проверки.
Вот что вы получите для своего класса Polygon
, нажав ALT + Insert
и выбрав « Generate Equality Members »:
public class Polygon : IEquatable<Polygon>
{
public Point[] Vertices { get; set; }
public bool Equals(Polygon other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return Equals(other.Vertices, Vertices);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof (Polygon)) return false;
return Equals((Polygon) obj);
}
public override int GetHashCode()
{
return (Vertices != null ? Vertices.GetHashCode() : 0);
}
}
Некоторые из функций, о которых я говорил выше, не применяются, поскольку есть только одно поле. Также обратите внимание, что он не проверял содержимое массива.
В общем, однако, ReSharper выкачивает много отличного кода за считанные секунды. И эта функция стоит в моем списке вещей, которые делают ReSharper таким замечательным инструментом.
Для сравнения двух массивов элементов я использую метод расширения SequenceEqual .
Что касается общих Equals и GetHashCode, существует метод, основанный на сериализации, который может сработать для вас.