2017-12-05 6 views
0

Visual Studio 2015에서는 작동하지만 Visual Studio 2017에서는 작동하지 않는 이유를 설명 할 수 있습니다.이 C# 함수가 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가 존재하지 않는다고 말했습니다.

+3

'ConvertAll'은 분명히'IEnumerable '이 아닌'List '의 메소드입니다. 어쩌면 한 환경에서 다른 환경에 존재하지 않는 확장 방법이있을 수 있습니까? –

+1

VS 2015 솔루션에서'ConvertAll'을 오른쪽 클릭하고'Go To Definition'을 선택하십시오. 무슨 일 이니? – mjwills

+0

이전에'Count()'를 체크 했으므로 (이중 열거 형을 얻었으므로)'IEnumerable obj'를'List obj'로 변경하는 것을 고려해야합니다. – mjwills

답변

1

설명에서 언급했듯이 ConvertAll 메서드는 List<t>이 아닌 IEnumerable<T> 메서드로 MSDN에 정의되어 있습니다. here을 참조하십시오.

이 비주얼 스튜디오 2015에서 일하고 내가 왜 당신을 말할 수는 없지만, 그냥로 변환 라인 변경은 비주얼 스튜디오 2017에서 작동하도록 구현할 수있는 코드에 쉽게 수정이 :

var collection = obj.ToList().ConvertAll<TConvert>(converter); 

파일 상단에 using System.Linq;이 있어야합니다.

0

ConvertAllIEnumerable<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(); 

기본적으로 그냥 거의 같은 일을 SelectConvertAll 교체. 은 Sort을 대체합니다.