学懂C#编程:让函数返回 多个返回值 的几种常用技术

1. 使用 out 或 ref 参数

  outref 参数允许方法修改传入变量的值,并通过它们“返回”多个值。ref 需要变量事先初始化,而 out 不要求。

public void GetValues(out int val1, out string val2)
{val1 = 10;val2 = "Hello";
}// 使用示例
int num;
string text;
GetValues(out num, out text);

2. 使用 Tuple 或 ValueTuple

    元组允许你将多个值组合成一个复合值返回。

public (int, string) GetValues()
{return (10, "Hello");
}// 使用示例
var result = GetValues();
int num = result.Item1;
string text = result.Item2;// 使用 ValueTuple 可以命名元素
public (int Number, string Text) GetValueTuple()
{return (10, "Hello");
}var valueResult = GetValueTuple();
int number = valueResult.Number;
string textValue = valueResult.Text;

3. 定义一个类或结构体

创建一个包含所需字段的类或结构体,并返回这个类型的实例。

public class Result
{public int Value1 { get; set; }public string Value2 { get; set; }
}public Result GetValues()
{return new Result { Value1 = 10, Value2 = "Hello" };
}// 使用示例
var resultClass = GetValues();
int numClass = resultClass.Value1;
string textClass = resultClass.Value2;

4. 使用匿名类型

在LINQ查询中常用,但也可以在其他地方创建匿名类型并返回。

public object GetAnonymousValues()
{return new { Value1 = 10, Value2 = "Hello" };
}// 使用示例
var anonymousResult = GetAnonymousValues();
int numAnonymous = ((dynamic)anonymousResult).Value1;
string textAnonymous = ((dynamic)anonymousResult).Value2;

5. 使用动态类型

虽然不推荐作为常规做法,但在某些情况下可以返回 dynamic 类型。

public dynamic GetDynamicValues()
{return new { Value1 = 10, Value2 = "Hello" };
}// 使用示例类似于匿名类型dynamic dynamicResult = GetDynamicValues();// 动态类型在使用时不需要预先知道具体结构,但存在运行时错误风险int value1 = dynamicResult.Value1;string value2 = dynamicResult.Value2;Console.WriteLine($"Value1: {value1}, Value2: {value2}");

       选择哪种方法取决于具体需求,如代码的清晰度、性能考量以及是否需要强类型支持等因素。在C# 7及以后版本中,ValueTuple 成为了返回多个值的便捷且推荐的方式。

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

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

相关文章

升级CENTOS 系统内核

更新系统和安装ELRepo存储库: sudo yum update sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org sudo yum install https://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm安装最新的主线(Mainline)内核&…

人脸识别考勤机给企业带来了哪些好处

人脸识别考勤机给企业带来了哪些好处 随着考勤软件在国内各企业中逐渐使用,人们对于考勤的这种方式已不再生疏,传统的纸质签到、指纹打卡已因存在不灵敏、易作弊、难统计等诸多弊病,逐步被可以管理考勤的手机软件索取代; 近些…

【网络安全的神秘世界】渗透之信息收集流程

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 渗透测试之信息收集 切记:搜索到敏感信息之后,不要随意下载和传播,属于违法行为&#xf…

如何基于ITIL构建有效的IT服务管理体系

在数字经济时代,IT服务管理已成为企业运作的核心支撑。随着信息技术的快速发展和应用,企业对IT服务的需求不断增加,而如何高效地管理这些服务成为一个重要挑战。基于ITIL(信息技术基础架构库)构建有效的IT服务管理体系…

Virtualbox7.0版本安装报错:Invalid installation directory

错误情况 我在安装virtualbox最新版7.0.18时候,因为默认安装在C盘,我改成了E盘,然后就报错 Invalid installation directory The chosen installation directory is invalid, as it does not meet the security requirements. Refer to th…

深入理解 JS/TS 中的 filter 方法及其布尔值筛选功能

今天写需求的时候,需要对后端传回来的数据做乱码校验处理,需要筛除乱码数据。 这里我使用正则表达式并封装了一个判断是否为正常字段的方法。(如果是正常字段返回true,乱码字段返回false) 对后端返回的数据&#xff…

快速创建SpringBoot项目

在项目开发时候,我们不会自己创建一个maven项目,自己慢慢导入依赖,有更方便的方法: 1.idea快速创建spring boot项目 使用Spring Initializr 注意1:需要联网 注意2:resources里的目录结构: …

【js判断机型】

var isIOS /(iPhone|iPad|iPod)/i.test(navigator.userAgent) var isiPad navigator.userAgent.match(/(iPad)/) || (navigator.platform ‘MacIntel’ && navigator.maxTouchPoints > 1) 上面这个不行的话,再试下这个 var isiPad (navigator.userAg…

那些年我为了考PMP踩过的坑.....

说到考PMP我尊嘟很难过且伤心,众所周知,报考PMP都是要报机构的而且还是PMI认证的机构,所以在报考PMP过程中选的机构我可以说踩过了很多坑了...... Q:包过吗? 大家千万不要信某某机构说的包过噱头,真的很坑…

4000字读懂实时数仓的过去现在和未来(建议收藏)

1991年,比尔恩门(Bill Inmon)出版了他的第一本关于数据仓库的书《Building the Data Warehouse》,标志着数据仓库概念的确立。 我们所常说的企业数据仓库Enterprise Data Warehouse (EDW) ,就是一个用于聚合不同来源的…

【嵌入式】嵌入式Linux开发实战指南:从交叉编译到触摸屏交互

文章目录 前言:1.简介1.1. 交叉编译工具1.2. 项目开发流程:1.3. ARM开发板的连接方法 2. 开发板连接3. 系统文件 IO4. 设置共享文件夹3.1. 读文件3.2. 写文件3.2. 设置文件偏移量 4. LCD显示屏显示4.1. LCD 显示颜色4.2. 将文件下载到开发板4.2.1. 在CRT…

002.Linux CentOS7 安装

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

【Android面试八股文】Kotlin内置标准函数apply的原理是什么?

文章目录 一、原理解析二、 示例代码2.1 具体示例应用场景2.2 为什么使用 `apply`?apply 是 Kotlin 标准库中的一个高阶函数,它的作用是在对象上执行一个代码块,并返回这个对象本身。其原理涉及到函数类型和接收者对象的结合使用。 一、原理解析 函数类型与接收者对象的结合…

代码随想录算法训练营DAY42|1049. 最后一块石头的重量 II、494. 目标和、474.一和零

1049. 最后一块石头的重量 II 题目链接:1049. 最后一块石头的重量 II class Solution(object):def lastStoneWeightII(self, stones):""":type stones: List[int]:rtype: int"""n len(stones)sum_stones sum(stones)weight sum_…

Git Extensions gui工具差异显示乱码

某些IDE例如KEIL等默认编码格式为GB2312,而git extensions默认utf-8,如果不想修改文件格式为utf-8的话就修改git extensions格式为GB2312。 默认是没有chines 这个选项的,我这里是已经添加好的。方法为上方工具栏->设置->Git->设置…

Linux C编译器从零开发三

AST语法树 BNF抽象 expr equality equality relational ("" relational | "!" relational)* relational add ("<" add | "<" add | ">" add | ">" add)* add mul ("" …

为什么很多Java程序员会下意识觉得Java的就是最好的?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;做为一个真正热爱编程&#…

使用rufus做Kali Linux时持久分区大小如何设置

持久分区大小是什么意思&#xff1a; 持久分区大小指的是在U盘安装引导Kali Linux时&#xff0c;为保存Kali修改后的设置&#xff08;如中文界面显示等&#xff09;而预留的空间大小。这个空间相当于电脑中的D盘&#xff0c;用于保存修改后的设置。 而剩下的空间则用于安装Kali…

UE5 发射物目标追踪

UE5 发射物目标追踪 思路 求出需要旋转的角度&#xff0c;然后每帧旋转&#xff0c;再更新速度 实现&#xff1a; 求出发射物当前方向和目标方向的旋转后&#xff0c;插值求每帧的旋转。 //向目标旋转 float Speed MovementComponent->Velocity.Length(); //获取发射物…

MyBatis常用转义字符 大于、小于、大于等于、小于等

在Mybatis编写特殊常用字符你会发现会报错,比如常用的<,>,<,> 等&#xff0c;原因是与xml文件的元素<>冲突&#xff0c;所以需要转义。整理转义字符如下&#xff1a; 符号原始字符转义字符大于>>大于等于>>小于<<小于等于<<和&…