Проверить наличие типа int в C #? - PullRequest
4 голосов
/ 26 ноября 2008

У меня есть функция, которая, помимо прочего, принимает объект и тип и преобразует объект в этот тип. Тем не менее, входной объект часто является двойным, и тип некоторого варианта int (uint, long и т. Д.). Я хочу, чтобы это работало, если круглое число передается в виде двойного числа (например, 4.0), но для исключения, если в (4.3) передан десятичный. Есть ли какой-нибудь более элегантный способ проверить, является ли тип неким типом 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 ]

6 голосов
/ 26 ноября 2008

Это похоже на то, что вы просите. Я проверил его только на двойные, плавающие и целые числа.

    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;
    }
2 голосов
/ 26 ноября 2008
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!
0 голосов
/ 26 ноября 2008

Вы должны иметь возможность использовать комбинацию Convert.ToDecimal и x% y, я бы подумал, где y = 1 и проверка результата == 0;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...