我想检查一个对象是否是一个数字,以便 .ToString()
会产生一个包含数字和 +
、-
,。
是否可以通过 .NET 中的简单类型检查来实现?喜欢:
if (p is Number)
或者我应该转换为 string
,然后尝试解析为 double
?
更新:澄清我的对象是int
、uint
、float
、double
等等,它不是 string
。
我正在尝试制作一个将任何对象序列化为 XML 的函数,如下所示:
<string>content</string>
或
<numeric>123.3</numeric>
或引发异常。
最佳答案
您只需要对每种基本数字类型进行类型检查。
这是一个应该完成这项工作的扩展方法:
public static bool IsNumber(this object value)
{
return value is sbyte
|| value is byte
|| value is short
|| value is ushort
|| value is int
|| value is uint
|| value is long
|| value is ulong
|| value is float
|| value is double
|| value is decimal;
}
这应该涵盖所有数字类型。
更新
看来您确实想在反序列化期间从字符串中解析数字。在这种情况下,最好使用 double.TryParse
。
string value = "123.3";
double num;
if (!double.TryParse(value, out num))
throw new InvalidOperationException("Value is not a number.");
当然,这不会处理非常大的整数/长小数,但如果是这种情况,您只需要添加对 long.TryParse
/decimal.TryParse< 的额外调用
/其他。
关于c# - 检查对象是否为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1130698/