C#中数组=out参数?

这篇具有很好参考价值的文章主要介绍了C#中数组=out参数?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

- 结论

先上结论,答案是yes,C#中数组确实具有out参数的特性。

- 疑问

最近开发一个上位机的功能,有段代码看得我一直很迷糊,我的认识,函数的执行结果,要么在函数中通过return返回,要么通过out或ref参数返回。这段代码中明显没有通过return获取返回值,输入参数倒是看起来很像out返回值,但是我反复确认了N遍,定义就是没有out或ref类型。这就很是疑惑了,只好先放一边,先把它当做out参数取返回值理解去完成开发,今天有空终于把这个疑问摸清楚了。

- 验证

各种百度,网上并没有答案。于是参照原来的代码写了一段Console程序,发现输入参数(字节数组)还真是在函数中更改后返回最新值了。此时原先的不明就里已经确定为就是【字节数组】的原因了,最初怀疑是Byte类型的原因,在程序中验证后发现并不是,然后用非字节类型的数组验证了下,仍然能在实参中取到函数更新后的值,确定为就是数组的原因。此时已经有点怀疑引用类型值类型的原因了,但是不对啊,平时引用类型string用的这么多,印象中并不会返回值啊,通过程序验证,也确定string参数没有out参数的特性,这就不得其解了。。直到搜到一篇文章,说string类型是一种特殊的引用类型,其实此处就等于是值传递,所有的谜团才清晰了。原因就在于参数分传值与传址两种,数组为引用类型,是按地址传递的,所以具备out参数的特性。
点击查看代码
class Pr
{
    private static byte[] m_byBuff = new byte[2048];
    static void Main(string[] args)
    {   

        byte[] barr_read = new byte[1024];
        int int_read = 0;
        byte byte_read=0;
        int[] iarr_read = new int[10];
        string str_read = "0";

 
        bool r = DataProcess(barr_read);
        bool r1 = DataProcess(int_read);
        bool r2 = DataProcess(byte_read);
        bool r3 = DataProcess(str_read);
        //向控制台输出
        System.Console.WriteLine("数组类型实参传参后值(传参前为0,传参函数中有赋值):");
        System.Console.WriteLine("arr[0]:{0}",barr_read[0].ToString());
        System.Console.WriteLine("arr[1]:{0}", barr_read[1].ToString());
        System.Console.WriteLine("arr[2]:{0}", barr_read[2].ToString());
        System.Console.WriteLine("arr[3]:{0}", barr_read[3].ToString());

        System.Console.WriteLine("int类型实参传参后值(传参前为0,传参函数中有赋值):");
        System.Console.WriteLine(int_read.ToString());

        System.Console.WriteLine("byte类型实参传参后值(传参前为0,传参函数中有赋值):");
        System.Console.WriteLine(byte_read.ToString());

        System.Console.WriteLine("string类型实参传参后值(传参前为‘0’,传参函数中有赋值):");
        System.Console.WriteLine(str_read);

    }
    //Main是static的,因此aa也要申明为static,否则无法访问
    private static bool DataProcess(byte[] outbuff)
    {
        outbuff[0] = (byte)1;
        outbuff[1] = (byte)2;
        outbuff[2] = (byte)3;
        outbuff[3] = (byte)4;
        return true;

    }

    private static bool DataProcess(int[] outbuff)
    {
        outbuff[0] = 11;
        outbuff[1] = 12;
        outbuff[2] = 13;
        outbuff[3] = 14;
        return true;

    }

    private static bool DataProcess(int outbuff)
    {
        outbuff=10;
        return true;

    }
    private static bool DataProcess(byte outbuff)
    {
        outbuff = 20;
        return true;

    }



    private static bool DataProcess(string outbuff)
    {
        outbuff = "30";;
        return true;

    }
}

C#中数组=out参数?

- 参考

https://blog.csdn.net/weixin_44806070/article/details/107882525
https://www.cnblogs.com/mdnx/archive/2012/09/04/2671060.html文章来源地址https://www.toymoban.com/news/detail-533913.html

到了这里,关于C#中数组=out参数?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js合并数组对象(将数组中具有相同属性对象合并到一起,组成一个新的数组)

    1.原数组: 2.合并后数组: 3.实现方法: 4.测试: 1.原数组: 2.合并后数组: 3.实现方法一: 测试: 4.实现方法二: 测试:

    2024年02月08日
    浏览(53)
  • 前端基础面试题:如何判断对象是否具有某属性?遍历数组的方法有哪些?

    一、如何判断对象具有某属性? 如: let obj={name:\\\'zhangsan\\\',age:21} 有以下方法 ( property 为属性名的变量,实际上是key,键名): 1. property in obj 效果如图: in 运算符 2. Reflect.has(obj, property) 效果如图: 关于 Reflect: ① 它是JS的一个内置对象,无构造函数,可以用它遍历对象的key,如

    2023年04月08日
    浏览(37)
  • C#中的`out`关键字

    C# 中的 out 是一个用来在方法调用时传递数据的修饰符。它允许你在方法内部创建一个临时的变量,用于接收传递进来的参数值,并在方法执行完毕后,将该变量的值返回给调用方法的对象。out 主要用于那些需要知道方法执行结果的参数上。 在 C# 中,out

    2024年02月22日
    浏览(41)
  • C#中out关键字

    在C#中可以使用out,指定所给的参数是一个输出参数。out的使用方式与ref相同,都是在函数定义和函数调用中用作参数的修饰符。 运行结果,如下图所示: 实际上,out的执行方式与引用参数几乎完全一样,因为在函数执行完毕后,该参数的值将返回给函数

    2024年02月05日
    浏览(41)
  • LLMs之Morphic:Morphic(一款具有生成式用户界面的人工智能答案引擎)的简介、安装、使用方法之详细攻略

    LLMs之Morphic:Morphic(一款具有生成式用户界面的人工智能答案引擎)的简介、安装、使用方法之详细攻略 目录 Morphic的简介 1、技术栈 Morphic的安装和使用方法 1、克隆仓库 2、安装依赖 3、填写密钥 4、本地运行应用 部署 2024年4月初发布,Morphic是 一款具有生成式用户界面的人工

    2024年04月29日
    浏览(32)
  • C#的ref和out使用

    ref和out是C#中用于参数传递的,它们都允许在方法内部修改参数的值,区别如下: 1、ref:使用ref声明的参数,在方法调用前必须被初始化,并且可以被视为已经赋予了一个初始值。在方法内部对ref参数的修改会影响到方法外部传入的实参,也就是说,我在

    2024年02月16日
    浏览(51)
  • C#out、ref和params参数

    out参数用于传递一个方法的输出值。它表示在方法内部,该参数没有被初始化,而是由方法赋值。方法结束后,该参数会被赋予一个值。 在使用out参数时,调用方法时必须指定该参数,并且不需先进行初始化。 out参数可以在方法内部定义,并且可以定义多个。 ref参数用于在

    2024年02月13日
    浏览(38)
  • LLaMA 简介:一个具有 650 亿参数的基础大型语言模型 官网介绍

    2023 年 2 月 24 日 更新: 我们刚刚推出了Llama 2 - 有关最新信息的更多信息,请参阅我们关于 Llama 2 的博客文章。 作为 Meta 致力于开放科学的一部分,今天我们公开发布 LLaMA(大型语言模型 Meta AI),这是一种最先进的基础大型语言模型,旨在帮助研究人员推进人工智能这一子

    2024年02月10日
    浏览(29)
  • c#构建具有用户认证与管理的socks5代理服务端

    Socks 协议是一种代理 (Proxy) 协议, 例如我们所熟知的 Shdowsocks 便是 Socks 协议的一个典型应用程序, Socks 协议有多个版本, 目前最新的版本为 5, 其协议标准文档为 RFC 1928。 我们一起来使用.net 7 构建一个支持用户管理的高性能socks5代理服务端 目录 协议流程 1 client - server 客户端与

    2024年02月05日
    浏览(27)
  • c# WPF项目XAML 设计界面报错: 已添加具有相同键的项目

    现象如下: VS2017打开 WPF项目,XAML 设计界面不能显示,报错如下: System.ArgumentException 已添加了具有相同键的项。 在 System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) 在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) 在 System.Collections.Generic.Dictionary`2.Ad

    2024年01月18日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包