我有一个Hashtable,其中包含解析某个JSON的结果:decodedJson
。 decodedJson["key"]
可以是int,double,float,decimal或string。我需要将它转换为十进制,如果它是一个数字(我计划用(decimal)decodedJson["key"]
),或者如果不是则处理错误。
确定这一点的最有效方法是什么?
答案 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)
Decimal.TryParse,下面的文档链接:
http://msdn.microsoft.com/en-us/library/system.decimal.tryparse(v=vs.110).aspx
答案 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