c# - 检查对象是否为数字

标签 c# .net serialization types xml-serialization

我想检查一个对象是否是一个数字,以便 .ToString() 会产生一个包含数字和 +-

是否可以通过 .NET 中的简单类型检查来实现?喜欢:

if (p is Number)

或者我应该转换为 string,然后尝试解析为 double

更新:澄清我的对象是intuintfloatdouble 等等,它不是 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/

相关文章:

c# - 如何上下移动 GridView 中的行?

c# - 字典 : An item with the same key has already been added

c# - 如何在 Emgu 中将 Mat 裁剪成 ROI(OpenCV for C#)

c# - 在 UWP 项目中引用 native c++ dll

.net - 在 Visual Studio 2010 上将默认值 "Default.aspx"更改为 "Index.aspx"

c# - .Net如何允许将Nullables设置为Null

c# - 使用 native 加密提供程序时 .NET 中的内存泄漏

java - 序列化 - 需要手动定义 SerialVersionUID?

python - Django REST 框架 : SlugRelatedField for indirectly-related attribute?

Django REST 框架 : list of different serizalized objects?