Разные типы в обобщенном методе - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Хочу написать следующий метод: подается массив типа int или string или object и тд, и элемент того же типа, что и массив. Использование классов, по понятным причинам, не допускается. Можно ли написать такой метод? Особенно, если учитывать, что в object можно поместить класс? И в object [] разные элементы могут иметь разный тип. И как проверить задан ли оператор "==" для сравнения двух элементов одного типа?
        public static void MyVoid<T>(T[] array, T ob)
        {
            foreach (T el in array)
            {
                //var conv = el as ob; // Error CS0118  'ob' is a variable but is used like a type
                //if (el == ob) // Error    CS0019  Operator '==' cannot be applied to operands of type 'T' and 'T'
                if (el.ToString() == ob.ToString())
                    //TODO
            }
        }
Пока что придумал следующее решение, преобразовывать в string и сравнивать. Насколько это корректно? И еще один метод. На вход подается object, который может быть классом или структурой, стандартным типом (string, int, object) или массивом из элементов стандартного типа. Необходимо определить, к чему из вышеперечисленному объект относится?
public static void MyVoid2<T>(T myOb)
        {
            Type type = myOb.GetType();
            // Для класса или структуры
            if ((((type.IsClass) || (type.IsValueType && !type.IsEnum && !type.IsPrimitive))) && (!type.IsArray))
            {
                MessageBox.Show("Является классом или структурой");
            }
 
            ////Для массивов, элементы которых не имеют тип класса
            if (type.IsArray) //&&!type.IsClass)
            {
                // Но в object можно поместить элемент типа Class!
                object[] val = myOb as object[];
 
                if (val != null)
                    MessageBox.Show("Является массивом");
            }
 
            // Для простых типов (string, int, double, object), которые не являются классами и массивами
            if (type.IsPrimitive && !type.IsArray && !type.IsEnum) //&& !type.IsClass
            {
                MessageBox.Show("Явл простым типом");
            }
 
         }
Начал проверять, и понял, что я не учел некоторые моменты:
            object[] ob = new object[1];
            ob[0] = 121;
            //ob.GetType().IsClass вернет True
            string b = "";
            //b.GetType().IsClass вернет True
Спасибо.

Решение задачи: «Разные типы в обобщенном методе»

textual
Листинг программы
if (Assembly.GetAssembly(ob.GetType()).Location != "mscorlib")

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы