質問

ここにあります:

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はクラスのように見えます。また、私は<!> quot; up <!> quotではありません。 VBではありますが、パブリックフィールドですか?繰り返しますが、推奨されません-プロパティが望ましいでしょう。 VBについては知りませんが、C#3.0にはこれに関する非常に簡潔な構文があります。

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

2.0以上を使用している場合は、List <!> lt; T <!> gt;を検討してください。 ArrayListの代わりに。

他のヒント

ToArray

の結果をキャストする必要があります
MyStruct[] structs = (MyStruct[]) alList.ToArray(typeof(MyStruct));

ToArrayは正しい方法です。 C#の場合:

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

1.1を使用し続けていますか? 2.0を使用している場合、List <!> lt; T <!> gt;に移行できますか?代わりに?

これは私のために働いた

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

Visual Studio 2008を実行している場合は、Listオブジェクトを使用できます。

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

2.0以降を使用している場合は、次のように配列リストを定義できます。

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

これにより、配列と同じセマンティクスが得られます(インデックスによる検索、厳密な型指定、IEnumerableサポートなど)。

.Net 2.0以降では、汎用リストの代わりに配列を使用する理由は2つだけです。

  1. あなたは持っているアイテムの数を絶対的に確実に知っており、カウントが変わらないことを知っています。これは驚くほどまれです。
  2. 配列を必要とする関数を呼び出す必要があります。 BCLにはまだかなりの数のこれらが潜んでいますが、独自のコードはIEnumerable<T>, IList<T>, or ICollection<T>を要求する必要があり、まれに配列を指定する必要があります。

最後に、これはちょっとつまらないものですが、投稿したコードで対処したい2つのスタイル上のポイントがあります。最初に、New List<MyStruct>の作成に使用した短縮構文に注意してください。 =記号はなく、タイプ名を2回入力する必要はありません。 1.1でもサポートされていたため、言い訳はできません。次に、MSDNでMicrosoftが公開している .Netのスタイルガイドライン一般的な命名規則」セクションを参照してください。 o 'または' a '。緩やかに入力されたVB6 / VBScriptには便利でしたが、.Netは厳密に入力されているため、いぼはいぼいものになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top