什么等效于c#中的Microsoft.VisualBasic.Collection

本文关键字:Microsoft VisualBasic Collection 中的 什么 | 更新日期: 2023-09-27 17:57:39

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

这是vb调用:

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

在我的c#应用程序中,我需要将此调用为params的适当c#对象中的传递。

什么等效于c#中的Microsoft.VisualBasic.Collection

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

不过,标准BCL中最接近的集合是HashtableHashtableCollection之间的转换应该是相当直接的

例如

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的名字而对它表示不满,但如果你使用它,你就不会被迅猛龙吃掉,因为.net是完全独立于语言的。