Ahojte,
casto sa stava, ze by sa mi zislo v switch staemente alebo vyraze pouzit stringy (napriklad pre mime-type, koncovku suboru,… ale aj ine).
Problem ale je, ze v istych podmienkach seitch case vyhodnoti rozne stringy ako rovnake (nemecky windows a ostre s vs. ss) a tiez je tu mierny rozdiel v permace.
Mojim cielom je dosiahnut porovanavie stringov vo switchi pomocou StringComparison.Ordinal.
Nemate nejaky trik ako to vyriesit?
Ja som to skusal, cez vlastny typ, generuje to presne taky kod ako chcem, ale moc sa mi to nepaci.
public struct InvariantString : IEquatable<InvariantString>, IEquatable<string>
{
public string Value
{
get;
}
public InvariantString(string value)
{
this.Value = value;
}
public bool Equals(InvariantString other)
{
return string.Equals(this.Value, other.Value, StringComparison.Ordinal);
}
public bool Equals(string other)
{
return string.Equals(this.Value, other, StringComparison.Ordinal);
}
public static bool operator ==(InvariantString v1, string v2)
{
return string.Equals(v1.Value, v2, StringComparison.Ordinal);
}
}
public int Example(string value)
{
return new InvariantString(value) switch
{
InvariantString str when str == "Hello" => 1,
InvariantString str when str == "world" => 2,
_ => -1
};
}