只是有人可以解释我为什么在Visual Studio 2015上工作但在Visual Studio 2017上没有?
public static TConvert DynamicPop<TObject, TConvert>(this IEnumerable<TObject> obj, Converter<TObject, TConvert> converter, long @default = 1)
{
if (obj.Count() == 0)
{
dynamic _defaut = @default;
return (TConvert)_defaut;
}
var collection = obj.ConvertAll<TConvert>(converter);
collection.Sort();
dynamic lastValue = collection.Last();
return (TConvert)(lastValue + 1);
}
那对我说ConvertAll
并不存在。
答案 0 :(得分:1)
正如评论中所提到的,方法ConvertAll
在MSDN上定义为List<t>
的方法,而不是IEnumerable<T>
。请参阅here。
我无法告诉您为什么这在Visual Studio 2015中有效,但您可以轻松修复您可以在Visual Studio 2017中使用的代码。只需将转换行更改为:
var collection = obj.ToList().ConvertAll<TConvert>(converter);
请注意,您需要在文件顶部添加using System.Linq;
。
答案 1 :(得分:0)
ConvertAll
不是IEnumerable<T>
上的可用方法。 在VS 2015中,您必须通过自己构建的扩展方法(或引用的方法)调用它。
一种选择可能是替换:
var collection = obj.ConvertAll<TConvert>(converter);
collection.Sort();
dynamic lastValue = collection.Last();
使用:
dynamic lastValue = obj.Select(z => converter(z)).OrderByDescending(z => z).First();
基本上只是将ConvertAll
替换为Select
,这大致相同。 OrderByDescending
也会替换Sort
。