Как реализовать проверку параметров метода на соответствие определенному типу?

Как можно реализовать проверку параметров на строгое соответствие определенному типу? Нужно чтобы метод не пытался неявно привести тип аргумента к указанному типу, а в случае не соответствия сразу кидал Exception. Например при передаче b параметра типа char, нужно, чтобы он не брал его код, а сразу кидал Ex. Код некорректный, просто для примера

        public static string task01 (int a, double b)
    {
        if ((typeof(double) != b.GetType())) throw new ArgumentException($"Параметр {b} не является вещественным числом");
        if ((typeof(int) != a.GetType())) throw new ArgumentException($"Параметр {a} не является целым числом");

        string s1 = ("привет, " + a + '!' + '\n' + a + " + " + b + " = " + (a + b) + '\n' + "пока, " + b + "...");
        return s1;
    }

Ответы (1 шт):

Автор решения: tym32167

Во первых, проверка типов параметров - это работа компилятора, а не ваша. Если переданный параметр никак не привести к типу параметра в функции, то у вас код просто не скомпилируется.

Во вторых, в вашем примере, типы параметров будут конвертированы неявно до вызова метода - просто вызовите Console.WriteLine(task01('1', '2')); и увидите, что char, что вы передали, будет преобразован в int и double до вызова метода и внутри метода уже будут параметры типа int и double.

В третьих, если вам надо такую проверку писать для своих классов, тогда у вас вероятно проблемы с буквой L из SOLID.

→ Ссылка