A game framework written with osu! in mind.
at master 1.6 kB view raw
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. 2// See the LICENCE file in the repository root for full licence text. 3 4using System; 5using System.Collections.Generic; 6 7namespace osu.Framework.Localisation 8{ 9 /// <summary> 10 /// An equality comparer for the <see cref="LocalisableString"/> type. 11 /// </summary> 12 public class LocalisableStringEqualityComparer : IEqualityComparer<LocalisableString> 13 { 14 // ReSharper disable once InconsistentNaming (follows EqualityComparer<T>.Default) 15 public static readonly LocalisableStringEqualityComparer Default = new LocalisableStringEqualityComparer(); 16 17 public bool Equals(LocalisableString x, LocalisableString y) 18 { 19 var xData = x.Data; 20 var yData = y.Data; 21 22 if (ReferenceEquals(null, xData) != ReferenceEquals(null, yData)) 23 return false; 24 25 if (ReferenceEquals(null, xData)) 26 return true; 27 28 if (xData.GetType() != yData.GetType()) 29 return EqualityComparer<object>.Default.Equals(xData, yData); 30 31 switch (xData) 32 { 33 case string strX: 34 return strX.Equals((string)yData, StringComparison.Ordinal); 35 36 case ILocalisableStringData dataX: 37 return dataX.Equals((ILocalisableStringData)yData); 38 } 39 40 return false; 41 } 42 43 public int GetHashCode(LocalisableString obj) => HashCode.Combine(obj.Data?.GetType(), obj.Data); 44 } 45}