Vérifiez pour tout type int en C#?

J'ai une fonction qui, entre autres choses, prend un objet et un Type, et convertit l'objet en ce Type. Cependant, l'objet d'entrée est souvent un double, et le type de la variation de int (uint, long, etc.). Je veux que cela fonctionne si un numéro est transmis sous la forme d'un double (comme 4.0), mais de lever une exception si une virgule est passé dans (4.3). Est-il un moyen plus élégant de vérifier si le Type est une sorte d'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.");
}

Grâce.

Juste un couple de commentaires - 1) n'oubliez pas de flotte. 2) Vous pouvez utiliser les Mathématiques.Round(), parce que parfois 1.000000001 s'affiche au lieu de 1.0 due à virgule flottante questions.
Dirait également que vous êtes à la duplication de la fonctionnalité du Système.Convertir...
Les bons points, Jon, je ferai en sorte de souvenir de flotteurs. Dave, quand vous n'Système.Convertir des.ChangeType de double en int, il ne silencieusement les banquiers de l'arrondissement. Ce code est d'éviter qu'avant le Système.Convertir l'appel est fait.
Merci, Eric! Bon à savoir!

OriginalL'auteur Eric W | 2008-11-26