【发布时间】:2014-01-22 16:40:56
【问题描述】:
我想在我的游戏中编写一种命令行调试功能,允许用户输入变量的名称:
int number = 38;
...并访问该变量的值,只需输入“数字”或该变量的任何名称即可。 有没有办法把一个字符串变成一个变量名,或者像这样从一个等价的字符串中获取一个变量的值?
return GetVariable("number");
或者这是完全错误的方法吗?有没有其他方法可以随时获取任何变量的值,只需在某个地方输入?
解决方案
所以这是人们应该使用的:
public static T getFromString<T>(object context, string get)
{
var use = context;
BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static;
FieldInfo field = use.GetType().GetField(get, bindFlags);
Object value = field.GetValue(use);
return (T)value;
}
此代码有效。您只需要确保您的变量是在下面的 Foo 类中定义的。耶!
编辑:我再次编辑了该方法,现在它返回带有类型和您自己的上下文的变量。像这样使用它:
getFromString<int>(Game1, "number");
【问题讨论】:
-
尝试反射技巧
-
不幸的是,我对反射一无所知。不过我听说过。
-
如果你的变量类型相同,使用简单的
Dictionary -
使用字典确实违背了获得任何变量值的便捷方法的目的。使用字典,我必须声明我希望能够预先获得哪些变量的值。我有很多变量。这根本不方便或没有帮助。
标签: c# string xna integer converter