◆ var str = (string)(object)t;

// T 型の変数 t があります

string s = (string)t;

はエラーです
if(t is string)
{
    string s = (string)t;
}

型チェックしていてもだめです


どうやればいいんだろう と考えていたのですが いったん object キャストすればできました
> T fn<T>(T v) {
.     string s = (string)(object)v;
.     return (T)(object)s;
. }
> fn("a")
"a"

いろんな型を扱う関数で object で受け取るか T で受け取るかで迷っていましたが結局 object 化をしないとだめなら最初から object で受け取ればいいですね