试图弄清楚为什么我不能这样做......
我有这个简单的界面" IMapper"用于将一个对象更改为另一个对象:
public interface IMapper<T>
{
T Map();
}
你只需这样称呼:
var newObject = oldObject.Map();
然后我决定扩展IEnumerable以便我可以在整个枚举中执行此操作。所以我创建了这个函数:
public static class EnumerableMapperExtension
{
public static IEnumerable<TTo> Map(this IEnumerable<TFrom> enumerable) where TFrom : IMapper<TTo>
{
return enumerable.Select(x => x.Map());
}
}
除了上面的语法错误。它看起来像这样:
public static class EnumerableMapperExtension
{
public static IEnumerable<TTo> Map<TTo, TFrom>(this IEnumerable<TFrom> enumerable) where TFrom : IMapper<TTo>
{
return enumerable.Select(x => x.Map());
}
}
所以不要看这个漂亮的电话......
IEnumerable<NewType> newArray = oldArray.Map();
我必须这样称呼它:
IEnumerable<NewType> newArray = oldArray.Map<NewType, Oldtype>();
有没有理由编译器无法弄清楚枚举存储的类型?
(为清晰起见而编辑)
答案 0 :(得分:-1)
var newArray
会给方法带来负担,以确定它是什么类型。当你按照你所做的方式调用泛型方法时,你需要给调用者带来负担以提供类型。
可能有用:
IEnumerable<NewType> gg = oldArray.Map();
但我对仿制药的经验是,如果我能使它工作,那么这样的小麻烦就是零件和包裹