检查C#中的任何int类型?

时间:2008-11-26 15:39:58

标签: c# reflection casting types

我有一个函数,除其他外,它接受一个对象和一个Type,并将该对象转换为该Type。但是,输入对象通常是double,并且类型有一些int(uint,long等)的变体。如果圆数作为double传递(如4.0),我想要这个工作,但如果在(4.3)中传入小数则抛出异常。有没有更优雅的方法来检查Type是否是某种int?

if (inObject is double && (targetType == typeof (int)
                         || targetType == typeof (uint)
                         || targetType == typeof (long)
                         || targetType == typeof (ulong)
                         || targetType == typeof (short)
                         || targetType == typeof (ushort)))
{
    double input = (double) inObject;
    if (Math.Truncate(input) != input)
        throw new ArgumentException("Input was not an integer.");
}

感谢。

3 个答案:

答案 0 :(得分:6)

这似乎符合你的要求。我只测试了它的双打,浮标和整数。

    public int GetInt(IConvertible x)
    {
        int y = Convert.ToInt32(x);
        if (Convert.ToDouble(x) != Convert.ToDouble(y))
            throw new ArgumentException("Input was not an integer");
        return y;
    }

答案 1 :(得分:2)

int intvalue;
if(!Int32.TryParse(inObject.ToString(), out intvalue))
   throw InvalidArgumentException("Not rounded number or invalid int...etc");

return intvalue; //this now contains your value as an integer!

答案 2 :(得分:0)

你应该可以使用Convert.ToDecimal和x%y的组合,我原以为,y = 1并检查结果== 0;