ジェネリックメソッドで値型を返す時にボックス化させない方法

戻り値の型がTのジェネリックメソッドを実装した時、return (T)(object)valueのようなキャストを書いてしまうと、値型ではボックス化⇒ボックス化解除が行われてしまう。そもそもこういうコードを書くならジェネリクスじゃないだろという話は置いといて、ボックス化させない面白い方法を知った。

c# - How to avoid boxing of value types - Stack Overflow

c# - Primitive type conversion in generic method without boxing - Stack Overflow

ポイントは、値そのものではなくFuncでキャストすること。Func<int>objectFunc<T>とキャストすればコンパイルは通るし、実行時にTintなら動作する。なお、Func<int>objectFunc<object>Func<int>objectFunc<double>などは実行時に例外となる。