2012-02-22 2 views
1

ArrayList 개체를 List로 변환하기위한 확장 메서드를 구현하려고했습니다. 나는 this을 언급했다. 일반 반환의 확장 메서드가 인식되지 않아서 CS1061 오류가 발생합니다.

namespace MyProjects.Extensions 
{ 
    static class ArrayListExtensions 
    { 
     /// <summary> 
     /// ArrayList => List<T> 
     /// </summary> 
     /// <remarks> 
     /// Based on http://www.dotnetperls.com/convert-arraylist-list 
     /// </remarks> 
     public static List<T> ToListCollection<T>(this ArrayList arrayList) 
     { 
      List<T> list = new List<T>(arrayList.Count); 
      foreach (T instance in arrayList) 
      { 
       list.Add(instance); 
      } 
      return list; 
     } 
    } 
} 

내가 그것을 사용하려고

, 나는 내가 using MyProjects.Extensions 절을 추가하지만 여전히 인식되지 않는 것을 확인했다. 어떤 아이디어?

ArrayList arrTest = Settings.Default["ListA"] as ArrayList; 
arrTest.ToListCollection<MyCustomObject>(); 
+0

다른 어셈블리의 확장 방법입니까? 그렇다면 아래 답변을 참조하십시오. – leppie

+4

확장 메소드가 실제로'return arrayList.Cast () .ToList()'가 맞다는 것을 알고 계십니까? –

+0

문제가 해결 되었습니까? –

답변

5

는 확장 클래스를 public을 만들어보십시오. 다른 네임 스페이스에 있으면 현재 프로젝트에서 액세스 할 수 없습니다. 기본적으로 액세스 수정 자 지정 클래스가없는 경우 internal입니다.

namespace MyProjects.Extensions 
{ 
    public static class ArrayListExtensions 
    { 
     /// <summary> 
     /// ArrayList => List<T> 
     /// </summary> 
     /// <remarks> 
     /// Based on http://www.dotnetperls.com/convert-arraylist-list 
     /// </remarks> 
     public static List<T> ToListCollection<T>(this ArrayList arrayList) 
     { 
      List<T> list = new List<T>(arrayList.Count); 
      foreach (T instance in arrayList) 
      { 
       list.Add(instance); 
      } 
      return list; 
     } 
    } 
} 

읽기처럼 더에 대한 Access Modifiers on MSDN 뭔가를 수행합니다.

참고 : 참조 사이트에는 확장 클래스가 소비자와 동일한 네임 스페이스로 정의 된 데모가 있습니다.

또는 arrayList.Cast<T>().ToList() (Jon Skeet' 개의 댓글에서)을 사용할 수 있습니다.

희망이 도움이됩니다.

관련 문제