VB Collection - 转换为现代系列

时间:2012-06-26 10:17:11

标签: c# vb.net collections key

我需要将VB Collection转换为现代的,如Dictionary或Hashtable。对于我的方法,我需要Collection的键。谷歌搜索告诉我,这是不可能的。

使用新集合重写整个应用程序不是一个选项,因为应用程序非常大而且(从VB6转换为VB.Net)。 使用旧的Collection也不好 - 因为正在开发新的组件。

转换 - 例如 - Hashtable到Collection工作:

 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 COllection转换为现代的?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果要求对现有代码库产生尽可能小的影响,我会为Collection编写一个替代品。编写自己的类(暴露所有与VB集合相同的方法)会很容易(如果不是有点乏味),但是alos包含了返回键的其他方法。您可以从某些内置的.NET集合类型继承,也可以使用compisition来包装Hashtable。然后,您可以在转换后的VB.NET应用程序中更改Imports子句,以包含Microsoft.VisualBasic.Collection的Collection intsead。


对于它,我会发布一个替代但更复杂的解决方案。您可以使用Reflection来获取VB Collection对象在内部使用的私有Dictionary。有了它你可以迭代键。这比其他方法更糟糕,但应该同样有效。需要注意的是,如果MS改变了类的内部,那么访问类的私有成员很容易被破坏。