如何将数组作为引用参数传递

本文关键字:引用 参数传递 数组 | 更新日期: 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)