检查对象是否可以转换为特定值类型?

时间:2013-12-26 14:17:06

标签: c#

我有一个Hashtable,其中包含解析某个JSON的结果:decodedJsondecodedJson["key"]可以是int,double,float,decimal或string。我需要将它转换为十进制,如果它是一个数字(我计划用(decimal)decodedJson["key"]),或者如果不是则处理错误。

确定这一点的最有效方法是什么?

6 个答案:

答案 0 :(得分:5)

if (decodedJson["key"] is decimal)
{
//do your action
}

答案 1 :(得分:2)

如果对象是小数,则可以执行此操作

if (decodedJson["key"] is decimal)
{
   //Your code here
}

答案 2 :(得分:1)

is运算符可能是您的最佳选择

http://msdn.microsoft.com/en-us/library/scekt9xw.aspx

    if(decodedJson["key"] is decimal){ 
// do something 
}

答案 3 :(得分:0)

答案 4 :(得分:0)

根据问题,如果decodeJson [“key”]可以是int,float,double,decimal或字符串中的任何内容。我们需要检查所有类型。

if(decodedJson["key"] is int ||  decodedJson["key"] is float || decodedJson["key"] is double || decodedJson["key"] is decimal)
{
     decimal convereted_value = (decimal) decodedJson["key"];
     // Rest of your code here 
}
else
{
     // Error handling code here.
}

答案 5 :(得分:0)

由于它可以是任何数字类型,您可能需要:

var i = decodedJson["key"];
bool isNumeric = i is byte || i is sbyte || i is short || i is ushort || 
                 i is int || i is uint || i is long || i is ulong || 
                 i is float || i is double || i is decimal;

if (isNumeric)
    Convert.ToDecimal(i);
else
    //handle

如果要将其转换为非实际基础类型的类型,则简单的强制转换将不会工作。 Convert课程需要进行全面的测试。


如果您愿意,可以将其设为通用:

public static T To<T>(this object source) where T : IConvertible
{
    return (T)Convert.ChangeType(source, typeof(T));
}

public static bool IsNumeric(this Type t)
{
    return t.In(typeof(byte), typeof(sbyte), typeof(short), typeof(ushort), 
                typeof(int), typeof(uint), typeof(long), typeof(ulong), 
                typeof(float), typeof(double), typeof(decimal));
}

public static bool In<T>(this T source, params T[] list)
{
    return list.Contains(source);
}

或者找到更准确的IsNumeric here版本。

所以现在你打电话:

var i = decodedJson["key"]; 
if (i.GetType().IsNumeric())
    i.To<decimal>();
else
    //handle