为了账号安全,请及时绑定邮箱和手机立即绑定

返回不同类型的函数(out-)参数

返回不同类型的函数(out-)参数

C#
倚天杖 2023-09-09 17:10:36
我正在尝试编写一个方法,该方法将字节数组作为输入,将其他几种类型作为输出变量。该方法应该能够检查“输出”参数的类型并从字节数组中读取正确的值(这部分已经可以工作)。但我找不到一种简单的方法来获取输出参数。这是我到目前为止所得到的(已编辑,因为缺少逗号):在方法内部Test,args参数具有正确的值,但它们自然永远不会到达其相应的简单变量ui16、i16等等......当我将签名更改为public static object[] Test(byte[] daten, object[] args);然后return args;在函数结束时,我在函数外部获取值,但它们在 内部object[],并且我仍然需要在 中编写类似的内容main:object[] o = Test(buffer, new object[] { ui16, i16, ui32, i32, b });ui16 = (UInt16) o[0];i16 = (Int16)   o[1];ui32 = (UInt32) o[2];i32 = (Int32)   o[3];作为引用参数传递args是可行的,但是我必须声明另一个变量而不是传递new object[] { ui16, i16, ui32, i32, b }我想,我需要参数和输出的混合:public static void Test(byte[] daten, params out ui16, out i16, out ui32);但params不适用于不同类型。
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

嗯,你的问题很简单,或者我不明白。您唯一需要做的就是尽早声明返回对象,而不是在函数参数中创建它。就像这样:

object[] result = new object[] { ui16, i16, ui32, i32, b };
Test(buffer, result);

按照你的方式做:

Test(buffer, new object[] { ui16, i16, ui32, i32, b });

您只是没有机会获得结果值,因为一旦 Test 方法结束,这个新对象就会被销毁。但是,当您将其作为对先前创建的对象的引用传递时,一切都会按预期进行。


查看完整回答
反对 回复 2023-09-09
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信