我正在尝试在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");
}
我想知道这是否可行以及我该怎么做。
答案 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);
}