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
};
}