2

VB コレクションを Dictionary や Hashtable などの最新のコレクションに変換する必要があります。私のアプローチでは、コレクションのキーが必要です。グーグルはそれは不可能だと言っています。

アプリケーションは非常に古くて大きい (VB6 から VB.Net に変換された) ため、新しいコレクションを使用してアプリケーション全体を書き直すことはできません。開発中の新しいコンポーネントがあるため、古いコレクションを使用することも良くありません。

たとえば、ハッシュテーブルをコレクションに変換すると、次のようになります。

 using VBCollection = Microsoft.VisualBasic.Collection;
 public static VBCollection ToVBCollection(this Hashtable table)
    {
        var collection = new VBCollection();
        foreach (DictionaryEntry  pair in table)
        {
            collection.Add(pair.Value, pair.Key as string);
        }
        return collection;
    }

キーを取得する方法がわからないため、VBCollection を変換することはできません。

 using VBCollection = Microsoft.VisualBasic.Collection;
  public static Hashtable ToHashtable(this VBCollection Collection)
    {
        var table = new Hashtable();

        foreach (var pair in Collection)
        {
            table.Add(pair.Key, pair.Value); //I need the key and the corresponding value
        }
        return table;
    }

何かアドバイスはありますか?キーを取得することが本当に不可能な場合 (ありがとう、マイクロソフト)、どのように VB COlllection を最新のものに変換する必要がありますか?

前もって感謝します

4

1 に答える 1

0

既存のコードベースへの影響をできるだけ少なくすることが要件である場合は、Collection のドロップイン置換を作成します。VB コレクションと同じメソッドをすべて公開するだけでなく、キーを返す追加のメソッドを含む独自のクラスを作成するのは簡単です (少し面倒ではありません)。組み込みの .NET コレクション型の一部から継承するか、compisition を使用して Hashtable をラップすることができます。次に、変換された VB.NET アプリケーションの Imports 句を変更して、Microsoft.VisualBasic.Collection の Collection intsad を含めることができます。


一体、私は別の、しかしより複雑な解決策を投稿します。Reflection を使用して、VB Collection オブジェクトが内部で使用するプライベート ディクショナリを取得できます。これで、キーを繰り返すことができます。これは他のアプローチよりもハックですが、同様にうまく機能するはずです。1 つの注意点は、MS がクラスの内部を変更すると、クラスのプライベート メンバーへのアクセスが壊れる傾向があることです。

于 2012-06-26T12:52:24.110 に答える