|
■No73998 (キム さん) に返信
すみません、一点問題がありました。
今回は3つのジェネリックメソッドを作るのですが、そのうちの1つだけが他とは違って、
private static T bar<T>(int arg)
{
T result;
// 実装...
return result;
}
のいうように引数にT型を含んでいません。
なので、これをオーバーロードで解決しようとすると戻り値だけが異なるオーバーロードになってしまいます。
戻り値型のみが異なるオーバーロードは(少なくともC#レベルでは)出来ないので、教えていただいた方法では
このパターンを解決できませんでした。
自分では、いまのところ『IntPtrとUIntPtrはサポート外として、インターフェース制約を厳しくすることで
<なるべく> コンパイルエラーになるようにする』ぐらいしか思いつかないです。
public static T bar<T>(int arg) where T : struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
{
// コンパイルエラーに出来なかったものは実行時エラーでごめんなさい;;;;
if (!typeof(T).IsPrimitive)
{
throw new ArgumentException();
}
T result;
// 実装...
return result;
}
同じインターフェースを実装している構造体には無力ですし、『極力組み込み型と同じ』扱いとなるようにこれらの
インターフェースを実装している構造体は沢山ありそうなので余り意味ないですね。
何かこのパターンでも有効な方法はありますか?
|