OrdinalIgnoreCase helper Could be useful?

OrdinalIgnoreCase s1 = "a";
OrdinalIgnoreCase s2 = "A";
Assert.AreEqual(s1, s2);


Where:

public class OrdinalIgnoreCase : IEquatable&lt;OrdinalIgnoreCase&gt;
{
    public static StringComparer Comparer { get; } = StringComparer.OrdinalIgnoreCase;

    public static implicit operator OrdinalIgnoreCase(string s) =&gt; new OrdinalIgnoreCase(s);
    public static implicit operator string(OrdinalIgnoreCase s) =&gt; s.Text;

    public OrdinalIgnoreCase(string text) =&gt; Text = text;
    public string Text { get; }

    public override int GetHashCode() =&gt; Comparer.GetHashCode(Text);
    public override bool Equals(object obj) =&gt; Equals(obj as OrdinalIgnoreCase);
    public virtual bool Equals(OrdinalIgnoreCase other) =&gt; Comparer.Equals(Text, other.Text);

    public static bool operator ==(OrdinalIgnoreCase left, OrdinalIgnoreCase right) =&gt;
        Equals(left, right);

    public static bool operator !=(OrdinalIgnoreCase left, OrdinalIgnoreCase right) =&gt;
        !Equals(left, right);

    public override string ToString() =&gt; Text;
}
Review


I see no reason not to seal this class. No need for virtual methods.
You prefer readability over argument checks: Comparer.Equals(Text, other.Text)
I would make != the opposite of == as blackbox:  !(left == right);
If you want to be a bit more resilient to unicode shenanigans, you should do text.Normalize(); (á is not always á, unless you normalize)