Разные типы в обобщенном методе - 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")
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д