Можно ли проверить тип данных параметра в функции, не получая ошибку времени компиляции при вызове этой функции в c#? - PullRequest
0 голосов
/ 08 апреля 2020

Можно ли проверить тип данных параметра в функции, не получая ошибку времени компиляции при вызове этой функции в c#? Я не хочу получать ошибку времени компиляции при передаче неправильного значения функции в c#, например javascript.

Ниже приведен пример кода:

class Program
{
    static int containsThatItem(char[] arr1, char[] arr2)
    {
        Dictionary<char, bool> map = new Dictionary<char, bool>();

        foreach (var e in arr1)
        {
            map.Add(e, true);
        }

        foreach (var e in arr2)
        {
            if (!map.ContainsKey(e))
            {
                continue;
            }

            if (map[e])
            {
                Console.WriteLine("Item Found!");
            }
        }

        return 0;
    }

    static void Main(string[] args)
    {
        int[] arr1 = { 0, 1, 2, 3 };
        char[] arr2 = { 'a', 'b', 'c', 'd'};

        //Here I'm getting compile time error
        containsThatItem(arr1, arr2);   //All I want is to overcome this compile time error by adding validation of datatype inside the containsThatItem method.

        Console.ReadKey();
    }
}

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Вы можете использовать object или dynamici c типы параметров.

Для выполнения проверок типа вы можете использовать is или операторы typeof .

Краткое описание оператора is из MSDN

Используйте оператор is, чтобы проверить, можно ли преобразовать тип с помощью справочное преобразование, преобразование в бокс или преобразование в распаковку.

Краткое описание оператора typeof из MSDN

Используйте оператор typeof для проверки если тип времени выполнения результата выражения точно соответствует данному типу.

0 голосов
/ 08 апреля 2020

Вы можете передать его как object.

И вы можете проверить тип данных с помощью функции GetType.

Вот код, представляющий мое решение, он может содержать ошибки но вы должны быть в состоянии исправить это согласно вашей логике c, я просто иллюстрирую идею решения.

static int containsThatItem(object arr1, object arr2)
        {
            if (arr1.GetType() == typeof(int[]) && arr2.GetType() == typeof(char[]))
            {
                int[] Converted_arr1 = (int[]) arr1;
                char[] Converted_arr2 = (char[]) arr2;

                Dictionary<char, bool> map = new Dictionary<char, bool>();

                foreach (var e in Converted_arr1)
                {
                    map.Add(e, true);
                }

                foreach (var e in Converted_arr2)
                {
                    if (!map.ContainsKey(e))
                    {
                        continue;
                    }

                    if (map[e])
                    {
                        Console.WriteLine("Item Found!");
                    }
                }

            }

            return 0;
        }
        static void Main(string[] args)
        {
            int[] arr1 = { 0, 1, 2, 3 };
            char[] arr2 = { 'a', 'b', 'c', 'd' };

            //Here I'm getting compile time error
            containsThatItem(arr1, arr2);   //All I want is to overcome this compile time error by adding validation of datatype inside the containsThatItem method.

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