0
我试图创建一个泛型参数的方法:如何检查C#泛型类型是否为集合(IEnumerable)?
public List<DTListItem> MapDTListResponse(List<App.Order.DT> dtList)
{
return dtList.Select(MapDTListResponse).ToList();
}
public DTListItem MapDTListResponse(App.Order.DT dt)
{
return RecMap<DTListItem, App.Order.DT>(dt);
}
private T RecMap<T,TU>(TU newObject)
{
if (TU is IEnumerable) // this doesn't work; what do i check for here
{
//Also, how do i get this bit to replicate MapDTListReponse
newObject.Select(RecMap).ToList();
}
else
{
return Mapper.Map<T>(newObject);
}
}
正如你可以看到,第一种方法需要和返回的集合,只是调用第二种方法(具有相同的名称但不同的签名)集合中的每个元素。
我想创建一个通用的方法来处理这两种情况。如果集合通过,它应该自动调用。为此,我需要检查,如果该类型是IEnumerable
但T is IEnumerable
有以下错误
TU行是一个类型,是不是在给定的范围内有效。
此外,newObject.Select(Map).ToList();
有以下错误
TU不包含定义选择
谢谢,T帽子似乎有帮助。我已经将if循环更改为if(typeof(IEnumerable).IsAssignableFrom(typeof(TU)))',但是它仍然不让我调用IEnumerable.select方法(我的问题的第二部分)。 – Ash
@AshwinNair你是对的,看看编辑。 –
在将'TU'作为'IEnumerable'投下之后,'select'下的错误消失了,但是我无法复制第一个方法的功能,因为它现在试图返回一个'List'。我猜测没有办法用一种方法来做到这一点。 –
Ash