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

Xai*_*oft 8 c# vb.net

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

这是vb调用:

public void CallStoredProc(string spName, Microsoft.VisualBasic.Collection params);
Run Code Online (Sandbox Code Playgroud)

在我的c#app中,我需要在适当的c#对象中调用它来传递params.

Jar*_*Par 11

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

尽管标准BCL中最接近的集合是Hashtable.转换之间Hashtable并且Collection应该相当直接

例如

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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 你不能混合它.这并不意味着你不能使用彼此库中的类型...... (4认同)

svi*_*ick 5

除非你可以改变的方法,因此,它需要ICollection,IEnumerable或者它们的通用款式,您必须通过的一个实例Microsoft.VisualBasic.Collection给这个方法.

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

new Microsoft.VisualBasic.Collection()
Run Code Online (Sandbox Code Playgroud)

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