如何将数组作为引用参数传递
本文关键字:引用 参数传递 数组 | 更新日期: 2023-09-27 18:36:22
感谢一些帮助将下面的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
这应该是代码的直接翻译。为了使这不仅仅是"给我答案",我将继续解释翻译中发生的事情。首先是代码:
//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
关键字使用 latebound。当您不与 Com 接口或动态内容时,在 .net 中进行后期绑定通常被认为是不好的做法......
我希望
,这将回答您的问题的第一部分和最后一部分"我很感激将下面的 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)