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

相关推荐
吾爱星辰1 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer1 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
IT良1 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
yufei-coder1 小时前
掌握 C# 中的 LINQ(语言集成查询)
windows·vscode·c#·visual studio
Kalika0-02 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch2 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
代码雕刻家2 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构
一个闪现必杀技2 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
Fan_web2 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
龙图:会赢的2 小时前
[C语言]--编译和链接
c语言·开发语言