我有一个方法,它采用存储过程名称和Microsoft.VisualBasic.Collection?我正在引用一个vb项目,我必须将一个集合传递给这个方法,但是我当前的项目是在c#中,所以我不清楚我可以将哪些内容传递给该方法?
这是vb电话:
public void CallStoredProc(string spName, Microsoft.VisualBasic.Collection params);
在我的c#app中,我需要在适当的c#对象中调用它来传递params。
答案 0 :(得分:11)
一种选择是直接从C#中使用Collection
类型。这是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;
}
注意:这不是直接映射。 Collection
类型支持Hashtable
不喜欢的许多操作:值之前和之后,按数字或键索引等等...我的方法是在整个应用程序中始终使用一种类型适当地改变C#或VB项目
答案 1 :(得分:5)
除非您可以更改方法,因此需要ICollection
,IEnumerable
或其通用变体,否则必须传递Microsoft.VisualBasic.Collection
的实例那种方法。
从C#的角度来看,Microsoft.VisualBasic.Collection
只是一个类,您可以像使用任何其他类一样使用它,例如:
new Microsoft.VisualBasic.Collection()
当然,您必须在项目中引用程序集Microsoft.VisualBasic.dll。
答案 2 :(得分:2)
没有“C#对象”或“VisualBasic.net对象”这一点 - 它都是.net,因此您可以简单地包含对Microsoft.VisualBasic.dll的引用并使用该Microsoft.VisualBasic。集合。
C#开发人员经常对Microsoft.VisualBasic.dll不满意,因为名称,但如果你使用它,你就不会被Velociraptors吃掉,因为.net是完全独立于语言的。