source

문자열 컬렉션을 목록으로 변환

manysource 2023. 5. 20. 10:54

문자열 컬렉션을 목록으로 변환

보통은, 저는List<String>[또는, VB에서는,List(Of String)에 대하여StringCollection가능한 경우: 최상의 문자열 컨테이너를 참조하십시오.

하지만, 보이는 것처럼, 제네릭 - 그래서,List<String>VS 2008의 설정 디자이너에서는 지원되지 않는 것 같습니다.따라서 사용자 설정에서 문자열 목록을 사용하려면 다음을 사용해야 합니다.StringCollection거기.

지금은 보기 싫지만,StringCollection내 코드 전체에서, 나는 그것을 변환해야 합니다.List<String>어떻게 하면 효율적으로 할 수 있을까요?아니면, 더 좋은 것은, 내가 잘못 알고 있고 사용할 수 있는 방법이 있다는 것입니다.List<String>설정 디자이너?

편집: .NET 2.0을 사용해야 합니다.

변환 중StringCollection로.List<string>.NET 3.5를 사용하는 경우 매우 간단합니다.

var list = stringCollection.Cast<string>().ToList();

당신의 두 번째 질문과 관련하여, 저는 사용이 가능한 것으로 기억하는 것 같습니다.List<string>Visual Studio의 설정 디자이너에 있습니다.사용자 지정 유형을 선택한 다음 해당 유형을 탐색하면 작동합니다.하지만 제가 착각할 수도 있어서 확인이 필요할 것 같습니다.

stringCollection.Cast<string>().ToList()

만약 당신이 .NET 2.0을 사용해야 한다면, 저는 가장 깨끗한 방법은 포장지를 만드는 것이라고 생각합니다.StringCollection그것을 실행하는IEnumerable<string>그리고.IEnumerator<string>위해서StringCollection그리고.StringEnumerator각각 다음과 같다.(참고: 메타데이터에 따르면,StringEnumerator구현하지 않음IEnumerator). 아래의 샘플.하지만, 결국, 누군가, 어딘가에서 할 것입니다.foreach()저쪽에StringCollection그래서 누군가는 단순하다고 주장할 수 있습니다.foreach(string item in stringCollection)에 추가합니다.List<string>충분할 것 같습니다. 이것이 당신의 필요를 충족시키기에 충분하지 않을 것 같습니다.

또한 구현할 수 있습니다.IList<string>또한 이 접근 방식을 사용하여 기본 문자열을 복제하는 것을 절약할 수 있지만, "스택" 유형의 대리자 호출(스택에서 메소드 호출 한 번 더!)에 대한 벌금을 지불하게 됩니다.어쨌든 시스템 내 인터페이스 측면에서 처리하는 것이 좋습니다.IEnumberable<string>,IList<string>등, 구체적인 목록 대신에, 그것은 당신을 더 큰 유연성으로 안내할 것입니다.

    static void Main(string[] args)
    {
        StringCollection stringCollection = new StringCollection();
        stringCollection.AddRange(new string[] { "hello", "world" });

        // Wrap!
        List<string> listOfStrings = new List<string>(new StringCollectionEnumerable(stringCollection));

        Debug.Assert(listOfStrings.Count == stringCollection.Count);
        Debug.Assert(listOfStrings[0] == stringCollection[0]); 

    }

    private class StringCollectionEnumerable : IEnumerable<string>
    {
        private StringCollection underlyingCollection; 

        public StringCollectionEnumerable(StringCollection underlyingCollection)
        {
            this.underlyingCollection = underlyingCollection; 
        }

        public IEnumerator<string> GetEnumerator()
        {
            return new StringEnumeratorWrapper(underlyingCollection.GetEnumerator()); 
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return this.GetEnumerator(); 
        }
    }

    private class StringEnumeratorWrapper : IEnumerator<string>
    {
        private StringEnumerator underlyingEnumerator; 

        public StringEnumeratorWrapper(StringEnumerator underlyingEnumerator)
        {
            this.underlyingEnumerator = underlyingEnumerator;
        }

        public string Current
        {
            get
            {
                return this.underlyingEnumerator.Current; 
            }
        }

        public void Dispose()
        {
            // No-op 
        }

        object System.Collections.IEnumerator.Current
        {
            get
            {
                return this.underlyingEnumerator.Current;
            }
        }

        public bool MoveNext()
        {
            return this.underlyingEnumerator.MoveNext(); 
        }

        public void Reset()
        {
            this.underlyingEnumerator.Reset(); 
        }
    }

C# 3.0 및 .NET 3.5를 사용하는 경우 다음을 사용하여 목록을 만들 수 있습니다.

var list = new List<string>(new StringCollection().Cast<string>());

다른 방법은 다음과 같습니다.

var c = new StringCollection();
c.AddRange(new List<string>().ToArray());

단순하고 정당하게 반복해서 목록에 항목을 추가하는 것이 어떻습니까, 아니면 제가 뭔가를 잘못 이해한 것입니까?

public static List<string> Convert(StringCollection collection)
{
    List<string> list = new List<string>();
    foreach (string item in collection)
    {
        list.Add(item);
    }
    return list;
}

C# 2.0

StringCollection colString = new StringCollection();
string[] arrString = new string[colString.Count];
colString.CopyTo(arrString, 0);
List<string> lstString = new List<string>(arrString);

언급URL : https://stackoverflow.com/questions/844412/convert-stringcollection-to-liststring