4

とりわけ、オブジェクトとタイプを取り込んで、オブジェクトをそのタイプに変換する関数があります。ただし、入力オブジェクトは多くの場合doubleであり、intのバリ​​エーション(uint、longなど)を入力します。ラウンド数がdouble(4.0など)として渡された場合はこれを機能させたいのですが、(4.3)で10進数が渡された場合は例外をスローします。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.");
}

ありがとう。

4

3 に答える 3

6

これはあなたが求めることをするようです。double、float、および int についてのみテストしました。

    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;
    }
于 2008-11-26T17:07:15.813 に答える
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!
于 2008-11-26T19:46:28.987 に答える
0

Convert.ToDecimal と x % y の組み合わせを使用できるはずです。ここで y = 1 と結果をチェック ==0;

于 2008-11-26T17:29:21.870 に答える