문자열 컬렉션을 목록으로 변환
보통은, 저는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
'source' 카테고리의 다른 글
Git에서 당김이 필요한지 확인합니다. (0) | 2023.05.20 |
---|---|
Nullable 간의 차이점은 무엇입니까?값 또는 Null 가능!=이(가) null입니까? (0) | 2023.05.20 |
Angular2에서 괄호, 괄호 및 별표의 차이점은 무엇입니까? (0) | 2023.05.20 |
Mongoose - 문자열 배열 저장 (0) | 2023.05.15 |
현재 git 브랜치의 이름을 셸 스크립트의 변수로 가져오는 방법은 무엇입니까? (0) | 2023.05.15 |