【问题标题】:Is there a C# equivalent to Java's Number class?是否有与 Java 的 Number 类等效的 C#?
【发布时间】:2013-07-25 14:33:51
【问题描述】:

我是 C# 的新手,来自 Java,我想检查某个对象是否是数字(它可以是整数、双精度、浮点等)。在 Java 中,我通过说 if (toRet instanceof Number) 来做到这一点。我希望有像if (toRet is Number) 这样的类似 C# 的东西,但到目前为止我还没有找到一个这样做的 Number 类。有没有办法做到这一点,还是我必须手动检查 Integer、Double 等?

编辑以获取更多信息:基本上我想要做的是最终拥有一个字节数组。但是,当数组存储在文本文件中时,我使用的解析器有时会认为它是整数数组或双精度数组。在 Java 中,我有这个:

JSONArray dblist = (JSONArray)result_;
byte[] reallyToRet = new byte[dblist.size()];
Object toComp = dblist.get(0);

if (toComp instanceof Number)
    for (int i=0; i < dblist.size(); ++i) {
        byte elem = ((Number) dblist.get(i)).byteValue();
        reallyToRet[i] = elem;
    }

    return reallyToRet;
}

这里的重要一点是 if 语句。有时dblist 中的对象会解析为整数,有时会解析为双精度数,很少会解析为字节,但我真正关心的最后是字节值。

【问题讨论】:

  • 没有 direct 等价物,但肯定不难做到。但是,上下文很重要,哪种解决方案最好。可以发一些代码吗?
  • 看起来常用的解决方案是创建自己的支票。 stackoverflow.com/questions/1130698/…
  • 在 C# 中不需要这样的东西,因为 C# 是一种强类型语言,其中无类型的东西(比如有一个参数类型为object 的方法)并不是很好开始的想法。把相关的上下文代码贴在你需要的地方。
  • @HighCore:Java 也是强类型的。但是在java中有一个类Number,甚至像ByteDoubleIntegerShort这样的类都继承自它。
  • 考虑is IConvertible,一个由您感兴趣的所有值类型类型实现的接口。无论如何您都需要它来实际获取值。

标签: c# numbers


【解决方案1】:

嗯,是的,但它是一种扩展方法,可以对所有可能性进行 OR 运算。

就是这样:

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
            || value is BigInteger;
}

你会这样使用它:

if (toRet.IsNumber());

这需要在static class 中。

【讨论】:

  • 重要的是要提到这段代码必须存在于static class 中,否则将无法编译。 OP 可能不知道 Extension Methods 是什么,因为 java 中没有这样的东西。
  • @HighCore 让 OP 知道 C# 有多强大可能是件好事!
  • 为了减少可能性领域,我将值的类型限制为 IComparable 而不是对象,因为所有这些类型都实现了 IComparable。
  • @digEmAll 它作为object 传递,所以你不能这样做。
【解决方案2】:

我不确定是否有任何课程。但是您可以检查例如,对于整数,请参阅

int val;
if(Int32.TryParse(integer, out val))  

else

不太可能,您可以使用 Double.TryParse(number, out val) 等。

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多