2011-05-24 66 views
8

我有一个方法需要一个存储过程名称和Microsoft.VisualBasic.Collection?我正在引用一个vb项目,在这个项目中我必须将一个集合传递给这个方法,但是我目前所在的项目是在c#中,所以我不清楚我可以传入该方法的内容?什么等价于C#中的Microsoft.VisualBasic.Collection?

这里是VB调用:

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

在我的C#应用​​程序,我需要调用这个在适当的C#对象PARAMS的通行证。

回答

11

一种选择是直接从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项目

+0

好吧,我会给这个镜头,我的印象是,你不能在同一个程序集中混用vb和c#代码 – Xaisoft 2011-05-24 18:44:29

+4

你不能混用它。这并不意味着你不能使用来自其他库的类型...... – Mr47 2011-05-24 18:45:13

+0

你不能混合代码,但你完全正确地引用用VB和C#编写的程序集。 – R0MANARMY 2011-05-24 18:45:50

5

除非你可以改变的方法,所以,它需要ICollectionIEnumerable或它们的通用款式,您必须合格Microsoft.VisualBasic.Collection一个实例给这个方法。

但从C#的点,Microsoft.VisualBasic.Collection就是一个类,你可以用它它的工作与其他任何类,即例如:

new Microsoft.VisualBasic.Collection() 

当然,你必须引用装配微软.VisualBasic.dll在您的项目中。

+0

我不能改变方法,所以我已经完成了这个方法。 – Xaisoft 2011-05-24 18:49:12

+0

+1对于更改方法采取IEnumerable的想法。有一种方法可以让编译器帮助您避免将来出现的问题:将VB程序集标记为[符合CLS](http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx),编译器会警告如果你做了任何事情,使得你的代码很难从C#或其他语言 – MarkJ 2011-05-25 08:57:11

+1

@MarkJ调用,除了'Microsoft.VisualBasic。Collection * *是* CLS兼容的,所以在这种情况下不会有任何警告。 – svick 2011-05-25 16:29:02

2

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

C#开发人员经常因为名字而对Microsoft.VisualBasic.dll皱眉,但如果您使用它,则不会被Velociraptors使用,因为.net完全和语言无关。

+0

我明白了,当我说对象时,我只是指被传入方法的实际引用。 – Xaisoft 2011-05-24 18:54:38

+0

是的,猛禽只捕获那些使用goto的人。 – svick 2011-05-24 19:18:10

+0

我到处使用goto,jk。 – Xaisoft 2011-05-24 19:20:42

相关问题