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

ChangeType函数的返回类型为Object。您需要显式转换为Int32

System.Int32 x = (System.Int32)Convert.ChangeType(v,t);

其他几个小问题

  • int使用名称而不是更习惯用法System.Int32
  • 而不是"System.Int32"使用typeof(int).FullName
于 2013-03-16T02:07:02.317 回答
1

你可以做一个 hepler 方法让它更容易一点

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 回答