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

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

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

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

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

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

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


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

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

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы