String Swap-case one-liners (6 ways)
I find your code amusing but since this is not Code Golf but Code Review I'll review it from our perspective this is, as clean-code first.

Even if you try to write compact code you should not use magic exressions and sacrifice readability. Instead encapsulate them in (local) function or use proper constants. You also should not use unrelated variable names like here i for char where c would be more appropriate. Alternatively you can also use the Aggregate to loop over the string and collect the results in a StringBuilder. The (char)0 can be replaced with the much prettier default.

const char caseOffset = (char)(1 &lt;&lt; 5);

char SwapCase(char c) =&gt; c ^= (char.IsLetter(c) ? caseOffset : default);

var result = 
    "heLLo, woRLd"
        .Aggregate(
            new StringBuilder(), 
            (b, c) =&gt; b.Append(SwapCase(c))
        ).ToString();


One more option would be to use Select and new string and feed it with the new result.

var result = new string("heLLo, woRLd".Select(SwapCase).ToArray())


The advantage of Select is that you don't need the =&gt; lambda anymore.