我正在制作一个游戏,我从json数据库中读取一些数据。所有数据库都包含类似的数据,但在很小的方面存在差一些商店"电源"作为字符串,而其他人将其存储为数字。还有一个可以将它存储为字符串或数字,因为有时候" power"可以是" 1 + X"或者其他的东西。此外,一些人存储了电源"变量名称" power"而其他人使用" pwr"。因此,我正在编写一种方法来轻松获取这些内容。在我的应用程序(用c#编写)中,我得到了一个包含所有信息的字典。所以我现在有这个:
void TryGetValueFromJson<T>(ref T variableToFill, string[] possibleValueNames, Dictionary<string,object> info) {
foreach (string valueName in possibleValueNames) {
object value;
if (info.TryGetValue(valueName, out value)) {
//I'm stuck here
break;
}
}
}
如我所知,变量ToFill是我班级中我读取其值的变量。 string []是不同数据库中此变量的所有可能名称(&#34; power&#34;,&#34; pwr&#34;)。 &#34;信息&#34;变量是我从服务器获得的json。
所以现在我必须将不同的值转换为想要的类型。如果我的variableToFill是一个字符串,但数据库将它作为一个int,则应该转换它。虽然我不确定如何正确地做到这一点。
答案 0 :(得分:4)
Convert.ChangeType
方法是你的朋友。这是为你做很多脏工作的方法之一,可以为你节省大量的代码。它依赖于实现IConvertible
接口的类型,但幸运的是,大多数原始类型都是:
void TryGetValueFromJson<T>(ref T variableToFill, string[] possibleValueNames, Dictionary<string,object> info)
{
Type outputType = typeof(T);
foreach (string valueName in possibleValueNames)
{
object value;
if (info.TryGetValue(valueName, out value))
{
variableToFill = (T)Convert.ChangeType(value, outputType);
break;
}
}
}
答案 1 :(得分:2)
我认为你可以在这里使用Convert
课程:
variableToFill = (T)Convert.ChangeType(value, typeof(T));