Разные типы в обобщенном методе - C#
Формулировка задачи:
Здравствуйте.
Хочу написать следующий метод: подается массив типа int или string или object и тд, и элемент того же типа, что и массив. Использование классов, по понятным причинам, не допускается. Можно ли написать такой метод? Особенно, если учитывать, что в object можно поместить класс? И в object [] разные элементы могут иметь разный тип. И как проверить задан ли оператор "==" для сравнения двух элементов одного типа?
Пока что придумал следующее решение, преобразовывать в string и сравнивать. Насколько это корректно?
И еще один метод. На вход подается object, который может быть классом или структурой, стандартным типом (string, int, 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
- }
- }
Листинг программы
- 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")
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д