C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。
拡張メソッドの最初の引数では、その引数が構造体でない限り、in 修飾子を使用することはできません
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/in-parameter-modifier#limitations-on-in-parameters
拡張メソッドの this
引数を参照にできる。拡張メソッドの最初の引数では、その引数が構造体でない限り、in 修飾子を使用することはできません。
struct St { } class Cl { } static class Extensions { public static void St(in this St st) { ; } // public static void Cl(in this Cl cl) { ; } ← class の場合は in 指定できない }