为什么这个C#函数存在于Visual Studio 2015中,而不存在于Visual Studio 2017中

时间:2017-12-05 02:33:51

标签: c# visual-studio visual-studio-2015 visual-studio-2017

只是有人可以解释我为什么在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并不存在。

2 个答案:

答案 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