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

1. 使用 outref 参数

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

cs 复制代码
public void GetValues(out int val1, out string val2)
{
    val1 = 10;
    val2 = "Hello";
}

// 使用示例
int num;
string text;
GetValues(out num, out text);

2. 使用 TupleValueTuple

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

cs 复制代码
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. 定义一个类或结构体

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

cs 复制代码
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查询中常用,但也可以在其他地方创建匿名类型并返回。

cs 复制代码
public object GetAnonymousValues()
{
    return new { Value1 = 10, Value2 = "Hello" };
}

// 使用示例
var anonymousResult = GetAnonymousValues();
int numAnonymous = ((dynamic)anonymousResult).Value1;
string textAnonymous = ((dynamic)anonymousResult).Value2;

5. 使用动态类型

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

cs 复制代码
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 成为了返回多个值的便捷且推荐的方式。

相关推荐
wainyz2 分钟前
Java NIO操作
java·开发语言·nio
工业3D_大熊8 分钟前
【虚拟仿真】CEETRON SDK在船舶流体与结构仿真中的应用解读
java·python·科技·信息可视化·c#·制造·虚拟现实
喵叔哟11 分钟前
重构代码之用委托替代继承
开发语言·重构
lzb_kkk17 分钟前
【JavaEE】JUC的常见类
java·开发语言·java-ee
SEEONTIME17 分钟前
python-24-一篇文章彻底掌握Python HTTP库Requests
开发语言·python·http·http库requests
起名字真南35 分钟前
【OJ题解】C++实现字符串大数相乘:无BigInteger库的字符串乘积解决方案
开发语言·c++·leetcode
tyler_download1 小时前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
小小小~1 小时前
qt5将程序打包并使用
开发语言·qt
hlsd#1 小时前
go mod 依赖管理
开发语言·后端·golang
小春学渗透1 小时前
Day107:代码审计-PHP模型开发篇&MVC层&RCE执行&文件对比法&1day分析&0day验证
开发语言·安全·web安全·php·mvc