2009-07-15 3 views
1

클래스 사용자가 있고 동일한 사용자 클래스 - 사용자에 대한 컬렉션도 구현했습니다. 사용자는 사용자 개체를 저장합니다. 사용자 컬렉션 클래스는 제네릭 컬렉션 클래스 - 컬렉션을 구현합니다.LINQ가 개체 쿼리 결과를 캐스팅합니다.

나는 LINQ 쿼리 결과를 내 컬렉션 클래스 - 사용자의 개체로 캐스팅하려고합니다. 명시 적 캐스팅을 시도 할 때마다, 그것은 클래스 런타임 예외가 될 수 없습니다.

사용자 컬렉션 클래스에서도 iEnumerable 인터페이스를 구현하려고했지만 여전히 쿼리 결과를 캐스팅하지 못했습니다.

이제는 쿼리 결과 집합 내에서 for 루프를 수행하고 사용자 지정 컬렉션 - 사용자를 채워야합니다.

내가 이것에 관해서 도와주세요, 고맙습니다. Sanjay Sachdev

+1

현재 어떤 언어로 작업하고 있습니까? – epotter

답변

2

IEnumerable을 param으로 사용하고 루프를 캡슐화하는 Collection 클래스에서 생성자를 생성하지 않는 이유는 무엇입니까? 내가 제안하고있는 무슨을 볼 수있는 콘솔 응용 프로그램이 시도 - 귀하의 경우, 당신은 컬렉션을하고있을 것입니다 - 난 그냥 예를 작성의 용이성 INT를 사용 ...

class Program 
{ 
    static void Main(string[] args) 
    { 
     MyCollection myCollection = new MyCollection(Enumerable.Range(1, 10)); 

     foreach (var item in myCollection) 
     { 
      Console.WriteLine(item); 
     } 
    } 
} 

public class MyCollection : Collection<int> 
{ 
    public MyCollection(IEnumerable<int> input) 
    { 
     foreach (var item in input) 
     { 
      this.Add(item); 
     } 
    } 
} 

또한 만들 수 있습니다

MyCollection myCollection = Enumerable.Range(1,10).ToMyCollection(); 
+0

+1 - List ()에서 파생 된 경우이 생성자를 무료로 가져옵니다. 전문 콜렉션 유형이 필요한 경우에도 고려해 볼 가치가 있습니다. 컬렉션에 특별한 상태가없는 경우 IEnumerable 에서 확장 메서드를 대신 사용할 수 있습니다. – dahlbyk

+0

메모 - 나는 컬렉션보다 목록에서 상속 받고 싶습니다 ... –

0

당신이 외설 무언가로 객체를 캐스팅 할 수 ... 확장 방법은 ... 쉽게 사용할 수

public static class MyCollectionHelper 
{ 
    public static MyCollection ToMyCollection(this IEnumerable<int> input) 
    { 
     return new MyCollection(input); 
    } 
} 

를 만들려면 다음이 같이 호출 것 둘 다 같은 inte를 구현하더라도 얼굴.

예를 들어, 배열을 모두 에도 캐스팅 할 수는 있지만, 둘 다 IEnumerable<int>을 구현합니다. 둘 중 하나를 인터페이스로 형변환 할 수는 있지만 오브젝트의 실제 유형은 변경되지 않습니다. 배열은 여전히 ​​배열이며 목록이 될 수 없습니다.

그래서 결과를 반복하고 컬렉션에 각 항목을 넣어야합니다.

LINQ 쿼리의 결과 일 때 결과를 반복해야하는 또 다른 이유가 있습니다. 쿼리가 반환하는 것은 완성 된 결과를 가진 콜렉션이 아니라 루프를 통해 루프 할 때 결과를 생성 할 객체입니다. 따라서, 결과가 루프되기 전에 결과조차 존재하지 않습니다.

1

질문에서 원하는 것이 100 % 명확하지 않지만 Cast 확장 방법을 사용해 보셨습니까?

관련 문제