1. ホーム
  2. c#

[解決済み] Generic Type Cast機能の作り方 [重複]について

2023-07-23 10:54:55

質問

重複の可能性があります。

は、parseを使用して文字列を任意の型に変換する汎用Parse()関数があるのでしょうか?

のように、いくつかの操作を行うための汎用的な関数を作りたいのですが。

ConvertValue<T>(string value)

もし Tint であれば、この関数はその値を int に変換し、その結果を返します。

同様に、もし Tboolean である場合、この関数は valueboolean に変換し、それを返す。

どのように書けばいいのでしょうか?

どのように解決するのですか?

こんな感じでしょうか?

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));
}

をキャッチすることを考えました。 InvalidCastException で発生する可能性のある例外をキャッチすることを考えました。 Convert.ChangeType() - が発生する可能性がありますが、この場合は何を返すのでしょうか? default(T) ? 呼び出し元が例外に対処する方が適切なようです。