ПРИМЕЧАНИЕ. Когда я изначально задавал этот вопрос, я включал IEnumerable.После некоторых ответов я понял, что этот вопрос был запутанным, потому что я смешивал интерфейсы и классы.Я удалил это.Теперь я спрашиваю только об этих трех типах классов:
- тип, который представляет одну вещь
- тип, который представляет список этих вещей
- тип, представляющий массив этих вещей
Прежде чем отвечать, пожалуйста, убедитесь, что вы полностью понимаете, о чем я спрашиваю.Я НЕ спрашиваю о:
- типах, которые являются производными от другого типа
- типов, которые можно назначить из другого типа
- типовкоторые реализуют некоторый интерфейс
Отредактированный вопрос:
Если я получил тип, используя typeof()
, могу ли я каким-то образом использовать это для проверки типов, которые представляютсписки или массивы извлеченного типа?
Я хочу сделать это специально, чтобы я мог делать сравнения, чтобы выяснить, является ли неизвестный тип каким-либо другим конкретным типом или списком или массивом этого конкретного типа.
Вот пример кода.Объяснение находится ниже кода.
public void Example()
{
Type k = typeof(Kitten);
Type m = typeof(Whatever); //Could even be a List<Whatever> or Whatever[]
Compare(k, m);
}
public void Compare(Type someType, Type otherType)
{
Type ListOfSomeType = ?????;
Type ArrayOfSomeType = ??????;
if(otherType == someType)
//otherType is a Kitten
elseif(otherType == ListOfSomeType)
//otherType is a List<Kitten>
elseif(otherType == ArrayOfSomeType)
//otherType is a Kitten[]
}
Дело в том, что функция Compare
получает Type
аргументов, содержащих типы.Он понятия не имеет, что они на самом деле.Но он должен быть в состоянии выяснить, относятся ли они к одному типу, или является ли второй тип списком ТИПА OF или массивом, хранящим объекты типа первого типа.
Я ввел вопросительные знаки (?????) для воображаемого кода, который я хотел бы использовать для создания типов коллекций.
Как я могу это сделать?Этот вопрос не является гипотетическим.