以下のコードはコンパイルが通りません。doubleはstructですし、ifの中はTがdoubleの時しか絶対に実行されないので良さそうなものですが、ダメです。
T Hoge<T>() where T : struct { if(typeof(T) == typeof(double)) { double r2 = 1.41421; return r2; } else { return default(T); } }
キャストしてもダメです。キャストでエラーが出ます。
T Hoge<T>() where T : struct { if(typeof(T) == typeof(double)) { double r2 = 1.41421; return (T)r2; } else { return default(T); } }
一度objectを経由させるとうまくいきます。
T Hoge<T>() where T : struct { if(typeof(T) == typeof(double)) { double r2 = 1.41421; return (T)(object)r2; } else { return default(T); } }