我需要将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转换为现代的?
提前致谢
答案 0 :(得分:0)
如果要求对现有代码库产生尽可能小的影响,我会为Collection编写一个替代品。编写自己的类(暴露所有与VB集合相同的方法)会很容易(如果不是有点乏味),但是alos包含了返回键的其他方法。您可以从某些内置的.NET集合类型继承,也可以使用compisition来包装Hashtable。然后,您可以在转换后的VB.NET应用程序中更改Imports子句,以包含Microsoft.VisualBasic.Collection的Collection intsead。
对于它,我会发布一个替代但更复杂的解决方案。您可以使用Reflection来获取VB Collection对象在内部使用的私有Dictionary。有了它你可以迭代键。这比其他方法更糟糕,但应该同样有效。需要注意的是,如果MS改变了类的内部,那么访问类的私有成员很容易被破坏。