Case insensitive string to replace custom comparers
Creating a throw-away object just to perform == comparison is ugly,
and likely inefficient:


public static bool operator ==(CaseInsensitiveString left, CaseInsensitiveString right) =&gt; new CaseInsensitiveString(left).Equals(right);



I suspect you wanted to avoid a tedious null-check, but I don't think you have a choice:

public static bool operator ==(CaseInsensitiveString left, CaseInsensitiveString right) =&gt; !ReferenceEquals(left, null) &amp;&amp; left.Equals(right);


But there's a more serious problem.
As it stands, two null instances of CaseInsensitiveString are not equal, and it should be.