У меня есть метод, который принимает в качестве аргумента общий тип T. Если T имеет список типов, я хотел бы передать его в список, где Y тип элемента, содержащегося в T. Я подозреваю, что я неправильно понимаю ограничения общих типов, но любая помощь будет оценена.Как создать общий тип T в список определенного типа
Пример:
public void MapData<T>(T genericData)
{
var genericDataType = genericData.GetType();
if (genericDataType.Name.Contains("List"))
{
//Cast T to a List containing the type of elements contained in T
}
}
мне нужно бросить genericData в список, так что я могу передать его другому методу с подписью:
public void MapListToField<T>(List<T> genericList)
UPDATE
Per ответ Эрика ниже, я хотел поделиться попыткой, которую я сделал, возможно, кто-то может указать на мою ошибку. Компилятор о том, что я пытаюсь использовать переменную как тип, который я понимаю смысл, но ElementType это тип, поэтому я не ясно, как исправить:
var elementType = genericData.GetType().GetGenericArguments()[0];
var castedList = genericData as List<elementType>;
Спасибо Эрик. Я попытался это сделать, но как только у меня появился тип элемента, я не смог применить его к списку этого типа. Я попробовал что-то вроде этого: var myCastedList = (Список) genericData; Ему не понравился элемент ElementType I, помещенный в List, жалуясь, что он был переменной, которую я пытался использовать в качестве типа –
rvb01
. Вы можете использовать выражения, они имеют большую гибкость для общих типов. Вы можете использовать Expression.Convert, как только вы определили типы, которые нужно применить к желаемому типу и выполнить. https://msdn.microsoft.com/en-us/library/mt654265.aspx Я мог бы попытаться написать подробный пример. – Eric
Знаете ли вы тип объектов списка, который вы ожидаете получить? – Eric