0

C# の文字列から任意の型に変数を動的にキャストしようとしています。次に例を示します。

string str = "System.Int32";
Type t = System.Type.GetType(str);
string v = "100";
System.Int32 x = Convert.ChangeType(v,t);

設計時に表示されるエラーは次のとおりです。

タイプ 'object' を 'int' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)

これを達成する最も簡単な方法は何ですか?上記の例は int32 へのキャストを示していますが、これは純粋に例です。種類は事前にわかりません。元の質問でそれを明確にしなかったことをお詫びします。

4

3 に答える 3

1

少し簡単にするために、ヘプラーメソッドを作成できます

public T ConvertTo<T>(object obj) where T : IConvertible
{
    try
    {
        return (T)Convert.ChangeType(obj, typeof(T));
    }
    catch
    {  // handle as needed/required
    }
    return default(T);
}

使用法:

string v = "100";
int value = ConvertTo<int>(v);

または拡張方法:

public static class Extensions
{
    public static T ConvertTo<T>(this object obj) where T : IConvertible
    {
        try
        {
            return (T)Convert.ChangeType(obj, typeof(T));
        }
        catch
        {  // handle as needed/required
        }
        return default(T);
    }
}

使用法:

string v = "100";
int value = v.ConvertTo<int>();
于 2013-03-16T02:13:50.257 に答える
0

変換しようとしている型がわかっている場合は、その型にキャストするだけです。

int x = (int)Convert.ChangeType(v, t);

キャストを実行するための一般的なメソッドがあると便利な場合もあります。

public static class ConvertHelper
{
    public static T ChangeType<T>(string value)
    {
      return (T)Convert.ChangeType(value, typeof(T));
    }
}

...

int x = ConvertHelper.ChangeType<int>(v);
于 2013-03-16T02:10:45.577 に答える