学懂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 成为了返回多个值的便捷且推荐的方式。

相关推荐
Hello--_--World3 分钟前
ES13:类私有属性和方法、顶层 await、at() 方法、Object.hasOwnProperty()、类静态块 相关知识点
开发语言·javascript·es13
Hugh-Yu-13012311 分钟前
二元一次方程组求解器c++代码
开发语言·c++·算法
weixin_5206498716 分钟前
C#进阶-特性全知识点总结
开发语言·c#
文祐18 分钟前
C++类之虚函数表及其内存布局
开发语言·c++
编程大师哥35 分钟前
C++类和对象
开发语言·c++·算法
M1582276905536 分钟前
工业 CAN 总线无线互联利器|4 路 CAN 转 4G/WiFi 网关 产品介绍
开发语言·php
burning_maple1 小时前
AI 工程实战指南:从零开始构建 AI 应用
开发语言·人工智能
fengyehongWorld1 小时前
C# 创建vba用的类库
c#
你的牧游哥1 小时前
Java 核心概念详解
java·开发语言
文祐1 小时前
C++类之虚函数表和虚基类表及其内存布局(一个子类虚继承一个父类)
开发语言·c++