Предметы коллекции CookieCollection - это Cookie.
Предметы другой коллекции могут быть SomeType и т. д.
Как я могу узнать это с помощью отражения? Мне нужно получить тип элемента для типов коллекции.
Например, что-то CookieCollection.ItemsType() должно возвращать Cookie
возможный?
Почему вы захотели получить CookieCollection рефлексией?
Я пишу De-Serializer, мне тоже нужно знать каждый тип элемента коллекции.
Возможно, проверить, есть ли у типа индексатор, и если да, то возвращаемый тип этого индексатора должен быть типом всех элементов. Или метод Add и т. д.
Кстати, как вы задаете вопрос, похоже, что вас особенно интересует только CookieCollection. Вы должны быть более ясными.
@FurkanKambay как получить тип индексатора?
@Nofuzy В чем заключается ваша основная проблема? Почему вам нужно знать?





Для этой цели вы можете использовать метод Type.GetGenericArguments.
List<Foo> myList = ...
Type myListElementType = myList.GetType().GetGenericArguments().Single();
CookieCollection не является универсальной коллекцией.
вы можете использовать CookieCollection как класс типа объекта
Чтобы узнать это, взглянув на индексатор:
public static Type GetCollectionItemType(Type collectionType)
{
var intIndexer = collectionType.GetMethod("get_Item", new[] { typeof(int) });
//var stringIndexer = collectionType.GetMethod("get_Item", new[] { typeof(string) });
return intIndexer?.ReturnType ?? null; // null mean the type has no int indexer
}
Вот:
public static Type GetIndexerType(this Type collectionType)
{
if (typeof(ICollection).IsAssignableFrom(collectionType))
{
var indexerProperty = collectionType.GetProperties().FirstOrDefault(x => x.Name == "Item");
if (indexerProperty != null)
{
return indexerProperty.PropertyType;
}
}
return null;
}
Однако не все коллекции имеют свойство Item.
@Magnus Очевидно, это имя индексатора. Если у типа есть индексатор, у вас не может быть свойства с именем Item или метода с именем get_Item с такими же параметрами. (видимо, я только что научился этому, попробовав)
@FurkanKambay Но ICollection действительно имеет такое свойство, поэтому нет гарантии, что оно будет в вашей коллекции.
У вас возникли проблемы при использовании метода GetType ()?