次のようないくつかの操作を実行するための汎用関数を作成したい:
ConvertValue<T>(string value)
T
がint
の場合、関数は値をint
に変換し、結果を返します。
同様に、T
がboolean
の場合、関数はvalue
をboolean
に変換して返します。
これを書く方法は?
このようなもの?
_public static T ConvertValue<T>(string value)
{
return (T)Convert.ChangeType(value, typeof(T));
}
_
その後、次のように使用できます。
_int val = ConvertValue<int>("42");
_
編集:
string
がU
を実装する場合、IConvertible
パラメーターに依存せずにこれをより一般的に行うこともできます。つまり、2つの型パラメーターを指定する必要があります。
_public static T ConvertValue<T,U>(U value) where U : IConvertible
{
return (T)Convert.ChangeType(value, typeof(T));
}
_
Convert.ChangeType()
によって発生する可能性のあるInvalidCastException
例外をキャッチすることを検討しましたが、この場合は何を返しますか? default(T)
?呼び出し元に例外を処理させる方が適切だと思われます。
おそらくIConvertible
アプローチほど見栄えはよくありませんが、T
を返すために、簡単なチェックtypeof(T)
を常に使用できます。
public static T ReturnType<T>(string stringValue)
{
if (typeof(T) == typeof(int))
return (T)(object)1;
else if (typeof(T) == typeof(FooBar))
return (T)(object)new FooBar(stringValue);
else
return default(T);
}
public class FooBar
{
public FooBar(string something)
{}
}