C# 在int、float、double、long和string之间转换

C# 在int、float、double、long和string之间转换,c#,C#,我正在制作一个从json数据库读取数据的游戏。所有数据库都包含相似的数据,尽管在一些方面有所不同。有些人将“电源”存储为字符串,而另一些人将其存储为数字。还有一种方法可以将其存储为字符串或数字,因为有时“幂”可以是“1+X”或其他形式。此外,有些人将“power”变量存储在名称“power”下,而另一些人使用“pwr”。因此,我正在编写一种方法来轻松获得这些。在我的应用程序(用c#编写)中,我得到一本包含所有信息的词典。所以我现在有一个: void TryGetValueFromJson<

我正在制作一个从json数据库读取数据的游戏。所有数据库都包含相似的数据,尽管在一些方面有所不同。有些人将“电源”存储为字符串,而另一些人将其存储为数字。还有一种方法可以将其存储为字符串或数字,因为有时“幂”可以是“1+X”或其他形式。此外,有些人将“power”变量存储在名称“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;
        }
    }
}
void TryGetValueFromJson(ref T variableToill,string[]possibleValueNames,Dictionary info){
foreach(possibleValueNames中的字符串valueName){
目标价值;
if(信息TryGetValue(值名称,输出值)){
//我被困在这里了
打破
}
}
}
variableToFill,顾名思义,就是我正在为其读取值的类中的变量。字符串[]是不同数据库中此变量的所有可能名称(“power”、“pwr”)。“info”变量是我从服务器获取的json


所以现在我必须把不同的值转换成想要的类型。如果我的variableToFill是一个字符串,但数据库将其作为int进行转换。虽然我不知道如何正确地执行此操作。

我认为您可以在此处使用
转换
类:

variableToFill = (T)Convert.ChangeType(value, typeof(T));

我认为您可以在这里使用
Convert
类:

variableToFill = (T)Convert.ChangeType(value, typeof(T));
方法是你的朋友。它是那些为您做大量脏活的方法之一,可以为您节省大量代码。它依赖于实现
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;
        }

    }
}
void TryGetValueFromJson(ref T variableToill,string[]possibleValueNames,Dictionary info)
{
类型输出类型=类型输出(T);
foreach(possibleValueNames中的字符串valueName)
{
目标价值;
if(信息TryGetValue(值名称,输出值))
{
variableToFill=(T)Convert.ChangeType(值,outputType);
打破
}
}
}
方法就是你的朋友。它是那些为您做大量脏活的方法之一,可以为您节省大量代码。它依赖于实现
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;
        }

    }
}
void TryGetValueFromJson(ref T variableToill,string[]possibleValueNames,Dictionary info)
{
类型输出类型=类型输出(T);
foreach(possibleValueNames中的字符串valueName)
{
目标价值;
if(信息TryGetValue(值名称,输出值))
{
variableToFill=(T)Convert.ChangeType(值,outputType);
打破
}
}
}

谢谢!我现在还想知道,有没有一种方法可以改变返回值的方法,而不是将其分配给ref参数?谢谢当然只需将返回类型设置为
T
,而不是
void
,并且
return
ChangeType
的结果转换为T,当然。但是我仍然需要“ref T variableToFill”参数,对吗?如果我将其更改为“Type”参数,那么C#将无法知道t应该是什么:sNo,方法名称中的为您做这件事。您可以完全删除ref参数。使用
default(T)
作为总括。谢谢!我现在还想知道,有没有一种方法可以改变返回值的方法,而不是将其分配给ref参数?谢谢当然只需将返回类型设置为
T
,而不是
void
,并且
return
ChangeType
的结果转换为T,当然。但是我仍然需要“ref T variableToFill”参数,对吗?如果我将其更改为“Type”参数,那么C#将无法知道t应该是什么:sNo,方法名称中的为您做这件事。您可以完全删除ref参数。使用
default(T)
作为总括。