2016-02-26 47 views
-2

我非常感谢将下面的VB代码翻译成C#的一些帮助。 我卡在obSMS.GetEstado(vMessages)。我正在调用一个外部服务,该服务应该会回复我vMessages, 一个数组,如底部所述。数组的每一行都有4个元素(0,1,2 3)。 请问如何将obSMS.GetEstado(vMessages)转换为C#的int。如何传递一个数组作为参数

非常感谢

Dim obSMS As SMSEmpresarial.clsSMS 
Dim vMessages As Object 
Dim i As Integer 

obSMS = New SMSEmpresarial.clsSMS 
obSMS.GetEstado(vMessages) 
For i = 0 To UBound(vMessages, 1) - 1 
    Me.ListBox1.Items.Add("Cod:" & CStr(vMessages(i, 0)) & 
    ":Tel:" & CStr(vMessages(i, 1)) & ":Est:" & CStr(vMessages(i, 2)) & 
    ":Obs:" & CStr(vMessages(i, 3))) 
Next 
obSMS = Nothing 
Exit Sub 

如何vMessages阵列的样子:

|row 0 |AAAAA |BBBBB |CCCCC |DDDD 
|row 1 |KKKKK |PPPPP |GGGGG |HHHH 
|row 2 |MMMMM |FFFFF |XXXXX |ZZZZ 
+2

* obSMS.GetEstado(vMessages)* in C#:* obSMS.GetEstado(vMessages); * – Gusman

+0

vMessages is一个对象,所以它的默认参考是C# –

+0

,除非我们谈论的是双引用,但这对于Get操作来说不太可能 –

回答

0

我希望,这将会回答你的问题的第一个和最后一个部分“我很欣赏一些帮助翻译的VB代码下面,到C#...“ ... ”请问如何将obSMS.GetEstado(vMessages)传递给C#,我需要一个int。“ http://converter.telerik.com/

SMSEmpresarial.clsSMS obSMS = default(SMSEmpresarial.clsSMS); 
object vMessages = null; 
int i = 0; 

obSMS = new SMSEmpresarial.clsSMS(); 
obSMS.GetEstado(vMessages); 
for (i = 0; i <= Information.UBound(vMessages, 1) - 1; i++) 
{ 
    this.ListBox1.Items.Add("Cod:" + Convert.ToString(vMessages(i, 0)) + ":Tel:" + Convert.ToString(vMessages(i, 1)) + ":Est:" + Convert.ToString(vMessages(i, 2)) + ":Obs:" + Convert.ToString(vMessages(i, 3))); 
} 
obSMS = null; 
return; 

//======================================================= 
//Service provided by Telerik (www.telerik.com) 
//Conversion powered by NRefactory. 
//Twitter: @telerik 
//Facebook: facebook.com/telerik 
//======================================================= 

第二部分,

obSMS.GetEstado(vMessages); 

由于vMessages是对象,你需要有如果obSMS.GetEstado(ref p)它初始化。如果obSMS.GetEstado(out p),则不需要初始化您的vMessages。但您需要使用这些关键字之一打电话 - obSMS.GetEstado(out vMessages)

+0

这并不涉及操作系统的主要问题 - 对'GetEstado'的调用 - 在发布的代码中没有足够的信息来处理通过代码转换解决它。我们需要关于函数'GetEstado'的信息。 –

+0

非常感谢T.S.它像一个魅力一样工作!最好的问候 – Saverio

+0

@Saverio享受! –

1

这应该是您的代码的直接翻译。为了使这不仅仅是“给我答案”,我会继续解释翻译中发生了什么。下面的代码第一:

//Declaring and initializing obSMS. var keyword uses implicit typing. 
var obSMS = new SMSEmpresarial.clsSMS(); 

//Declaring this as dynamic, because I have no clue what the eventual type will be. 
dynamic vMessages = new object(); 
obSMS.GetEstado(ref vMessages); 

foreach(var message in vMessages) 
{ 
    //this replaces Me 
    //+ is used to concatenate instead of & 
    //[] is the index accessor in C# 
    //ToString() is called instead of CStr() 
    this.ListBox1.Items.Add("Cod:" + vMessages[0].ToString() + ":Tel:" + vMessages[1].ToString() + ":Est:" + vMessages[2].ToString() + ":Obs:" + vMessages[3].ToString()); 
} 

最大的问题是,我们不知道什么vMessages更改为,所以我使用通过dynamic关键字latebinding。在.net中的后期绑定,当你不与Com接口或动态时,通常被认为是不好的做法...