Implement IEquatable on structs.

Any struct which overrides object.Equals(object obj) should implement IEquatable<T> to gain a more efficient Equals(T other) overload. This overload will be used by hashing collections like Dictionary which enables them to check equality without boxing the struct.
This commit is contained in:
RoosterDragon
2019-09-14 00:33:27 +01:00
committed by teinarss
parent 4a609bbee8
commit 6c9fbd40dc
6 changed files with 33 additions and 17 deletions

View File

@@ -9,9 +9,11 @@
*/
#endregion
using System;
namespace OpenRA
{
public struct Hotkey
public struct Hotkey : IEquatable<Hotkey>
{
public static Hotkey Invalid = new Hotkey(Keycode.UNKNOWN, Modifiers.None);
public bool IsValid()
@@ -74,6 +76,11 @@ namespace OpenRA
public override int GetHashCode() { return Key.GetHashCode() ^ Modifiers.GetHashCode(); }
public bool Equals(Hotkey other)
{
return other == this;
}
public override bool Equals(object obj)
{
var o = obj as Hotkey?;