2014-01-17 1 views
0

러시아어를 사용하여 C#에 코드를 씁니다. 반면 InvalidCastException이C#의 기본 캐스트 목록 별칭

+0

반환 유형은 List 이어야하며 IEnumerable을 List로 반환하기 전에 캐스트 할 필요가 없습니다. –

+0

클래스 이름에 그리스 문자가 포함되어 있습니까? –

+0

@ SonerGönül 러시아어, 실제로 :) –

답변

2

Список<T>에 SS 객체는 List<T>이다. 반대가 사실이 아닙니다. List<T>은 목록에서 파생 된 사용자 정의 클래스가 아닙니다. 따라서 List<T>의 인스턴스를이 클래스에서 파생 된 일부 클래스로 캐스팅 할 수 없습니다.

// which is odd, because ToList() already exists 
public static List<T> ToList<T>(this IEnumerable<T> source) 
{ 
    return source.ToList(); 
} 

또는 파생 클래스의 새로운 인스턴스를 생성하고 반환 :

그래서, 당신이 중 하나는 확장 메서드의 반환 형식을 변경해야합니다

public static Список<T> ПривестиКСписку<T>(this IEnumerable<T> source) 
{ 
    var список = new Список<T>(); 
    список.AddRange(source); 
    return список; 
} 

참고! 러시아어를 사용하지 마십시오. 러시아어를 모르는 사람들에게는 obfuscation처럼 보이며, 코드를 입력 할 때 입력 언어를 전환하는 것은 정말 고통 스럽습니다.

+1

다른 해결책이 없으면 감사합니다. – Sergey

0

당신이 캐스팅 할 필요가 없습니다 - 나는이 별칭

public static class Расширение 
{ 
    public static Список<T> ПривестиКСписку<T>(this IEnumerable<T> source) 
    { 
     return (Список<T>)(source.ToList()); 
    } 
} 

그러나 캐스팅 작동하지에 IEnumerable을 캐스팅 목록

public class Список<T> : List<T> 
{ 
} 

및 확장 방법에 대한 별칭 클래스를 생성 제네릭과 함께 작업

public class Список<T> : List<T> 
    { 
    } 
    public static class Расширение 
    { 
     public static List<T> ПривестиКСписку<T>(this IEnumerable<T> source) 
     { 
      return source.ToList(); 
     } 
    } 
0

기본 cla를 캐스팅 할 수 없습니다. 자식 클래스

public static class Расширение 
{ 
    public static Список<T> ПривестиКСписку<T>(this IEnumerable<T> source) 
    { 
     Список<T> list = new Список<T>(); 
     list.AddRange(source); 
     return list; 
    } 
}