什么相当于c#中的Microsoft.VisualBasic.Collection?

我有一个方法,它采用存储过程名称和Microsoft.VisualBasic.Collection ? 我正在引用一个vb项目,我必须将一个集合传递给这个方法,但是我当前的项目是在c#中,所以我不清楚我可以传递给方法的是什么?

这是vb调用:

public void CallStoredProc(string spName, Microsoft.VisualBasic.Collection params); 

在我的c#app中,我需要在适当的c#对象中将其称为params。

一种选择是直接从C#中使用Collection类型。 这是Microsoft.VisualBasic.dll程序集中的标准类型,可以从任何.Net语言使用。

尽管标准BCL中最接近的集合是Hashtable 。 在HashtableCollection之间进行转换应该相当直接

例如

 using VBCollection = Microsoft.VisualBasic.Collection; ... public static VBCollection ToVBCollection(this Hashtable table) { var collection = new VBCollection(); foreach (var pair in table) { // Note: The Add method in collection takes value then key. collection.Add(pair.Value, pair.Key); } return collection; } 

注意:这不是直接映射。 Collection类型支持Hashtable不喜欢的许多操作:值之前和之后,按数字或键索引等…我的方法是在整个应用程序中一致地使用一种类型并适当地更改C#或VB项目

除非您可以更改方法,因此它需要ICollectionIEnumerable或它们的通用变体,您必须将 Microsoft.VisualBasic.Collection的实例传递给该方法。

从C#的角度来看, Microsoft.VisualBasic.Collection只是一个类,您可以像使用任何其他类一样使用它,例如:

 new Microsoft.VisualBasic.Collection() 

当然,您必须在项目中引用程序集Microsoft.VisualBasic.dll。

没有“C#对象”或“VisualBasic.net对象”这样的东西 – 它都是.net,因此您可以简单地包含对Microsoft.VisualBasic.dll的引用并使用该Microsoft.VisualBasic.Collection。

由于名称的原因,C#开发人员常常对Microsoft.VisualBasic.dll不满意,但如果您使用它,则不会被Velociraptors吃掉,因为.net是完全独立于语言的。