хочется создать новый тип на основе строки, чтобы были запрещены операции сравнения, присваивания к строке.
Есть какое-то общепринятое решение? Типа best practice.
У меня что-то много boilerplate кода получается
public struct LanguageCode
{
public LanguageCode(string v)
{
value = v;
}
private readonly string value;
public override bool Equals(object obj)
=> obj is LanguageCode lc
? lc.value.Equals(value, System.StringComparison.CurrentCultureIgnoreCase)
: false;
public static bool operator ==(LanguageCode fst, LanguageCode snd)
=> fst.value.Equals(snd.value, System.StringComparison.CurrentCultureIgnoreCase);
public static bool operator !=(LanguageCode fst, LanguageCode snd)
=> !fst.value.Equals(snd.value, System.StringComparison.CurrentCultureIgnoreCase);
public override int GetHashCode()
=> value.ToLower().GetHashCode();
public static LanguageCode Default
=> new LanguageCode("en");
public override string ToString()
=> value.ToLower();
}
Для одиночного такого типа нормально. Но если хочу завести таких ещё парочку? Copy-Paste?