36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法

在C#中,params、ref 和 out 是方法声明中用于修饰参数的关键字,它们各自有不同的用途和语义。以下是它们的详细说明和用法:

1、 params 关键字

意义

params 允许方法接受可变数量的参数,这些参数会被编译为一个数组。适用于参数数量不确定的场景。

用法

  • 必须作为方法的最后一个参数。
  • 类型必须是一维数组(如 int[]、string[] 等)。
  • 调用时可以直接传递逗号分隔的参数列表,或直接传递数组。

示例

void PrintNumbers(params int[] numbers)
{foreach (var num in numbers){Console.WriteLine(num);}
}// 调用方式
PrintNumbers(1, 2, 3);       // 输出:1, 2, 3
PrintNumbers(new int[] {4, 5}); // 输出:4, 5

注意事项

  • 一个方法只能有一个 params 参数。
  • 不能与 ref 或 out 一起使用。

2、ref 关键字

意义

ref 表示参数是按引用传递的,方法内对参数的修改会影响调用方的变量。适用于需要方法内外共享同一存储位置的场景。

用法

调用前必须初始化变量(因为引用不能为 null)。
方法声明和调用时均需使用 ref。

示例

void ModifyValue(ref int x)
{x = x + 10; // 修改会影响调用方的变量
}int num = 5;
ModifyValue(ref num);
Console.WriteLine(num); // 输出:15

注意事项

  • 常用于需要返回多个值的场景(结合 out)。
  • 不能用于 params 参数。

3、out 关键字

意义

out 表示参数是按引用传递的,但调用前无需初始化(方法必须为其赋值)。适用于需要方法返回额外结果的场景。

用法

  • 方法声明和调用时均需使用 out。
  • 方法内部必须对 out 参数赋值(否则编译错误)。

示例

void TryParseNumber(string input, out int result)
{if (int.TryParse(input, out result)){Console.WriteLine("解析成功");}else{result = 0; // 必须赋值}
}int value;
TryParseNumber("123", out value);
Console.WriteLine(value); // 输出:123

C# 7.0+ 的简化语法

从 C# 7.0 开始,可以在调用时直接声明 out 变量:

TryParseNumber("456", out int result);
Console.WriteLine(result); // 输出:456

注意事项

  • 常用于 TryParse、Divide 等需要返回状态或额外结果的场景。
  • 不能用于 params 参数。

通过合理使用这些关键字,可以更灵活地处理方法参数,满足不同场景的需求。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型实战篇】华为信创环境采用vllm部署QwQ-32B模型

1. 背景 本文分享在华为昇腾机器上部署QwQ-32B模型的实践。 首先华为自己是提供了一套在信创机器(NPU)上部署模型的方案【1】,但是部署之后,测试发现会有输出截断的现象。QwQ-32B本身是支持128k的最大上下文长度,定位…

前端面经-VUE3篇(二)--vue3基础知识(二)计算属性(computed)、监听属性(Watch)

一、计算属性(computed) 计算属性(Computed Properties)是 Vue 中一种特殊的响应式数据,它能基于已有的响应式数据动态计算出新的数据。 计算属性有以下特性: 自动缓存:只有当它依赖的响应式数据发生变化时&#xff…

[预备知识] 5. 优化理论(一)

优化理论 梯度下降(Gradient Descent) 数学原理与可视化 梯度下降是优化领域的基石算法,其核心思想是沿负梯度方向迭代更新参数。数学表达式为: θ t 1 θ t − α ∇ θ J ( θ t ) \theta_{t1} \theta_t - \alpha \nabla…

大模型微调Fine-tuning:从概念到实践的全面解析

目录 引言 一、什么是大模型微调? 1.1 预训练与微调的区别 1.2 微调的技术演进 二、为什么需要微调? 2.1 解决大模型的固有局限 2.2 微调的优势 三、主流微调方法 3.1 全参数微调 3.2 参数高效微调(PEFT) 四、微调实践指…

Docker 使用下 (二)

Docker 使用下 (二) 文章目录 Docker 使用下 (二)前言一、初识Docker1.1 、Docker概述1.2 、Docker的历史1.3 、Docker解决了什么问题1.4 、Docker 的优点1.5 、Docker的架构图 二、镜像三、容器四、数据卷4.1、数据卷的概念4.2 、…

洛谷P12238 [蓝桥杯 2023 国 Java A] 单词分类

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] Copy from luogu. [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 既然都是字符串前缀的问题了,那当然首先就应该想到 Trie \text{Trie} Trie 树。 我们可…

pta作业中有启发性的程序题

1 【知识点】&#xff1a;多态 函数接口定义&#xff1a; 以Student为基类&#xff0c;构建GroupA, GroupB和GroupC三个类 裁判测试程序样例&#xff1a; #include<iostream> #include <string> using namespace std;/* 请在这里填写答案 */int main() {const …

Scrapy框架之CrawlSpider爬虫 实战 详解

CrawlSpider 是 Scrapy 框架中一个非常实用的爬虫基类&#xff0c;它继承自 Spider 类&#xff0c;主要用于实现基于规则的网页爬取。相较于普通的 Spider 类&#xff0c;CrawlSpider 可以根据预定义的规则自动跟进页面中的链接&#xff0c;从而实现更高效、更灵活的爬取。 Scr…

Glide 如何加载远程 Base64 图片

最近有个需求&#xff0c;后端给出的图片地址并不是正常的 URL&#xff0c;而且需要一个接口去请求&#xff0c;但是返回的是 base64 数据流。这里不关心为啥要这么多&#xff0c;原因有很多&#xff0c;可能是系统的问题&#xff0c;也可能是能力问题。当然作为我们 Android 程…

004-nlohmann/json 快速认识-C++开源库108杰

了解 nlohmann/json 的特点&#xff1b;理解编程中 “数据战场”划分的概念&#xff1b;迅速上手多种方式构建一个JSON对象&#xff1b; 1 特点与安装 nlohmann/json 是一个在 github 长期霸占 “JSON” 热搜版第1的CJSON处理库。它的最大优点是与 C 标准库的容器数据&#xf…

#基础Machine Learning 算法(上)

机器学习算法的分类 机器学习算法大致可以分为三类&#xff1a; 监督学习算法 (Supervised Algorithms&#xff09;:在监督学习训练过程中&#xff0c;可以由训练数据集学到或建立一个模式&#xff08;函数 / learning model&#xff09;&#xff0c;并依此模式推测新的实例。…

正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真

目录 Multisim使用教程说明链接 一、正弦波信号发生电路 1.1正弦波发生电路 电路组成 工作原理 振荡频率 1.2 正弦波发生电路仿真分析 工程文件链接 二、方波信号发生电路 2.1 方波发生电路可调频率 工作原理 详细过程 2.2 方波发生电路可调频率/可调占空比 调节占空比 方波产生…

【AND-OR-~OR锁存器设计】2022-8-31

缘由锁存器11111111111-硬件开发-CSDN问答 重置1&#xff0c;不论输入什么&#xff0c;输出都为0&#xff1b; 重置0&#xff0c;输入1就锁住1 此时输入再次变为0&#xff0c;输出不变&#xff0c;为锁住。

力扣-字符串-468 检查ip

思路 考察字符串的使用&#xff0c;还有对所有边界条件的检查 spilt&#xff08;“\.”&#xff09;&#xff0c;toCharArray&#xff0c;Integer.parseInt() 代码 class Solution {boolean checkIpv4Segment(String str){if(str.length() 0 || str.length() > 4) retur…

BC8 十六进制转十进制

题目&#xff1a;BC8 十六进制转十进制 描述 BoBo写了一个十六进制整数ABCDEF&#xff0c;他问KiKi对应的十进制整数是多少。 输入描述&#xff1a; 无 输出描述&#xff1a; 十六进制整数ABCDEF对应的十进制整数&#xff0c;所占域宽为15。 备注&#xff1a; printf可以使用…

ARM子程序和栈

微处理器中的栈由栈指针指向存储器中的栈顶来实现&#xff0c;当数据项入栈时&#xff0c;栈 指针向上移动&#xff0c;当数据项出栈时&#xff0c;栈指针向下移动。 实现栈时需要做出两个决定&#xff1a;一是当数据项进栈时是向低位地址方向向上生 长&#xff08;图a和图b&a…

jwt身份验证和基本的利用方式

前言 &#xff1a; 什么是jwt&#xff08;json web token&#xff09;&#xff1f; 看看英文单词的意思就是 json形式的token 他的基本的特征 &#xff1a; 类似于这样的 他有2个点 分割 解码的时候会有三个部分 头部 payload 对称密钥 这个就是对称加密 头部&am…

n8n工作流自动化平台的实操:利用本地嵌入模型,完成文件内容的向量化及入库

1.成果展示 1.1n8n的工作流 牵涉节点&#xff1a;FTP、Code、Milvus Vector Store、Embeddings OpenAI、Default Data Loader、Recursive Character Text Splitter 12.向量库的结果 2.实操过程 2.1发布本地嵌入模型服务 将bge-m3嵌入模型&#xff0c;发布成满足open api接口…

MATLAB人工大猩猩部队GTO优化CNN-LSTM多变量时间序列预测

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 数据准备 2 CNN-LSTM模型搭建 3 GTO超参数优化 3.1 GTO函数极值寻优 3.2 GTO优化CNN-LSTM超参数 3.3 主程序 4 结语 0 引言…

git项目迁移,包括所有的提交记录和分支 gitlab迁移到gitblit

之前git都是全新项目上传&#xff0c;没有迁移过&#xff0c;因为迁移的话要考虑已有项目上的分支都要迁移过去&#xff0c;提交记录能迁移就好&#xff1b;分支如果按照全新项目上传的方式需要新git手动创建好老git已有分支&#xff0c;在手动一个一个克隆老项目分支代码依次提…