5

ここに私が持っています:

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 を使用しています。

4

6 に答える 6

4

の結果をキャストする必要がありますToArray

MyStruct[] structs = (MyStruct[]) alList.ToArray(typeof(MyStruct));
于 2008-10-09T16:59:50.683 に答える
1

ToArrayは正しい方法です。C#では次のようになります。

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

ところで、1.1を使用して立ち往生していますか?2.0を使用している場合、代わりにList <T>に移行できますか?

于 2008-10-09T17:00:54.550 に答える
1

ArrayListを使用しているので、1.1を使用していると思いますか?

その場合、次のことがうまくいくと思います:

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

(編集 - ビルの ToArray の使用法はより便利です - 私はそれについて知りませんでしたが、その後、私は [もしあれば] ArrayList を使用することはめったにありません)

ただし、MyStruct が本当に構造体である場合、変更可能な構造体が悪い考えであると強く言うことはできません。つまり、作成後に .Name と .Content を設定できる場所です。構造体は、ほとんど常に不変でなければなりません。実際には、MyStruct はクラスであるように見えます。また、私は VB について詳しくありませんが、それらはパブリック フィールドですか? 繰り返しますが、推奨されませんが、プロパティの方が望ましいでしょう。VB については知りませんが、C# 3.0 には非常に簡潔な構文があります。

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

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

于 2008-10-09T16:59:58.047 に答える
0

これは私のために働いた

Dim array As MyStruct() = alList.ToArray(GetType(MyStruct))
于 2008-10-09T17:04:50.487 に答える
0

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

  Dim alList As New List(Of MyStruct)
  alList.Add(oStruct)
于 2008-10-09T17:05:57.410 に答える
0

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でもサポートされていたので、言い訳はできません。次に、MicrosoftがMSDNで公開している.Netのスタイルガイドライン(一般的な命名規則のセクションを参照)では、「o」や「a」などのハンガリーのいぼに対して特に推奨しています。緩く型付けされたVB6/VBScriptには適していましたが、.Netは強く型付けされているため、いぼは非常に醜いものになっています。

于 2008-10-09T17:07:31.213 に答える