문제

여기에 :

Public Structure MyStruct
   Public Name as String
   Public Content as String
End Structure

Dim oStruct as MyStruct = New MyStruct()
oStruct.Name = ...
oStruct.Content = ...

Dim alList as ArrayList = new ArrayList()
alList.Add(oStruct)

ArrayList를 정적 강하게 유형의 MyStruct 배열로 변환하고 싶습니다. 어떻게 할 수 있습니까? 나는 Toarray와 운이 없었습니다.

.NET Framework 2.0을 사용하고 있습니다.

도움이 되었습니까?

해결책

ArrayList를 사용하고 있기 때문에 1.1을 사용하고 있다고 가정합니다.

어떤 경우에는 다음이 효과가 있다고 생각합니다.

ArrayList list = new ArrayList();
MyStruct[] array = new MyStruct[list.Count];
list.CopyTo(array); 

(편집 - Bill의 ToArray 사용법이 더 편리합니다 - 나는 그것에 대해 알지 못했지만, 그럼에는 거의 [Arraylist를 사용하지 않는다면).

그러나 MyStruct가 실제로 구조물이라면, 돌연변이가있는 스트러크가 나쁜 생각이라고 충분히 말할 수는 없습니다. 즉, 창조 후 .name 및 .content를 설정할 수 있습니다. 스트러크는 거의 항상 불변이어야합니다. 실제로, 당신의 mystruct는 그것이 수업이어야하는 것처럼 보입니다. 또한 - 나는 VB에서 "UP"가 아니지만 공공 분야입니까? 다시 권장하지 않습니다 - 속성이 바람직합니다. 나는 VB에 대해 잘 모르지만 C# 3.0은 이것에 대해 매우 간결한 구문을 가지고 있습니다.

public class SomeType
{
    public string Name {get;set;}
    public string Content {get;set;}
}

2.0 이상을 사용하는 경우 목록을 고려하십시오.u003CT> ArrayList 대신.

다른 팁

당신은 결과를 던져야합니다 ToArray

MyStruct[] structs = (MyStruct[]) alList.ToArray(typeof(MyStruct));

ToArray는 올바른 방법입니다. C#에서는 다음과 같습니다.

MyStruct[] array = (MyStruct[]) alList.ToArray(typeof(MyStruct));

1.1, BTW를 사용하여 붙어 있습니까? 2.0을 사용하는 경우 목록으로 전환 할 수 있습니까?u003CT> 대신에?

이것은 나를 위해 효과가있었습니다

Dim array As MyStruct() = alList.ToArray(GetType(MyStruct))

Visual Studio 2008을 실행중인 경우 목록 객체를 사용할 수 있습니다.

  Dim alList As New List(Of MyStruct)
  alList.Add(oStruct)

2.0 이상을 사용하는 경우 Arraylist를 다음과 같이 정의 할 수 있습니다.

Dim alList as New List(Of MyStruct)()
alList.Add(oStruct)

이렇게하면 배열과 동일한 의미를 제공합니다 (인덱스의 조회, 강력한 타이핑, ienumerable 지원 등).

.NET 2.0에는 일반 목록 대신 배열을 사용하는 데 두 가지 이유가 있습니다.

  1. 당신은 당신이 가지고있는 항목의 수를 절대적으로 알고 있으며, 카운트가 변경되지 않을 것임을 알고 있습니다. 이것은 놀랍게도 드물다.
  2. 배열이 필요한 함수를 호출해야합니다. BCL에는 여전히 상당한 수의 이러한 수가 있지만 자신의 코드는 요청해야합니다. IEnumerable<T>, IList<T>, or ICollection<T>, 그리고 배열 만 거의 없습니다.

마지막으로, 이것은 일종의 nit-picky이지만, 게시 한 코드에서 다루고 싶은 두 가지 스타일 포인트가 있습니다. 먼저, 내가 작성하는 데 사용한 약어 구문에 주목하십시오. New List<MyStruct>. 기호가 없으며 유형 이름으로 두 번 키를 키울 필요가 없습니다. 그것은 1.1에서도 지원되었으므로 변명은 없습니다. 둘째, .NET에 대한 스타일 지침 MSDN에 Microsoft가 게시했습니다 (참조 일반 명명 규칙 섹션) 구체적으로 'o'또는 'a'와 같은 헝가리 사마귀를 추천합니다. 느슨하게 입력 된 VB6/VBScript에 좋았지 만 .NET은 강하게 입력되어 사마귀를 사마귀로 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top