在int,float,double,long和string之间转换

时间:2014-06-15 14:28:41

标签: c#

我正在制作一个游戏,我从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,则应该转换它。虽然我不确定如何正确地做到这一点。

2 个答案:

答案 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));