从字符串转换为存储在Type变量中的类型

时间:2018-07-10 18:03:43

标签: c# type-conversion

我正在尝试在Unity中创建一种调试控制台,以便能够在运行时更改(例如)启用/禁用boolean值。

有一点我要在某个变量中设置一个值,但是该值存储为string(用户输入),我需要将其强制转换为该变量的类型(存储在Type变量中),但我不知道是否可行。

这是我遇到问题的代码部分:

private void SetValueInVariable(string variable, Type type, string toSet)
{
    //reflection - https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/reflection
    Type container = typeof(StaticDataContainer);
    FieldInfo placeToSet = container.GetField(variable, BindingFlags.Static);
    placeToSet.SetValue(null, //here I need to convert "toSet"); 
}

我想知道这是否可行以及我该怎么做。

1 个答案:

答案 0 :(得分:1)

TypeDescriptor provides a fairly robust way将字符串转换为特定类型。当然,这仅适用于少数具有相当简单的解析的类型。

private void SetValueInVariable(string variable, Type type, string toSet)
{
    //reflection - https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/reflection
    Type container = typeof(StaticDataContainer);
    FieldInfo placeToSet = container.GetField(variable, BindingFlags.Static);
    var value = TypeDescriptor.GetConverter(type).ConvertFrom(toSet);
    placeToSet.SetValue(null, value); 
}