首页 > 编程语言 >【转】[C#] 创建返回多个值的方法

【转】[C#] 创建返回多个值的方法

时间:2024-04-29 17:11:27浏览次数:30  
标签:返回 string 示例 C# 创建 Sum int ref public

来源:https://mp.weixin.qq.com/s/LqFX32Cb4YeEQMOBYr23jQ

在遇到执行方法需要返回多个值的情况时(比如去数据库查一个值,要同时返回数据库查询耗时),可以使用以下方式实现:

1、使用 Tuples

C# 中的元组提供了一种返回多个值的方法,而无需定义新的类或结构。让我们浏览一个示例,该示例展示了如何使用元组来计算和返回两个数字的总和和乘积:

public (int Sum, int Product) Calculate(int a, int b)  
{  
    return (a + b, a * b);  
}
var result = Calculate(2, 3);  
Console.WriteLine($"Sum: {result.Sum}, Product: {result.Product}");

2、使用 Out 

在某些情况下,有必要在方法的主返回值旁边返回其他信息。这就是 C# 中的参数被证明是有价值的地方。让我们浏览一个实际示例,该示例涉及一个分析日期字符串并使用参数返回对象的方法:outDateTimeout

public bool TryParseDate(string dateString, out DateTime date)  
{  
    return DateTime.TryParse(dateString, out date);  
}

if (TryParseDate("2024-02-19", out DateTime resultDate))  
{  
    Console.WriteLine($"Parsed Date: {resultDate.ToShortDateString()}");  
}  
else  
{  
    Console.WriteLine("Invalid Date");  
}

3、使用 ValueTuple 

C# 中的 ValueTuple 为处理元组操作(包括解构)提供了增强的多功能性。让我们深入研究一个实用的例子,通过创建一个函数来演示 ValueTuple 的实用性,该函数提供结构中几何形状的尺寸:ValueTuple

public (int, int) GetDimensions()  
{  
    return (1024, 768);  
}

var (width, height) = GetDimensions();  
Console.WriteLine($"Width: {width}, Height: {height}");

4、返回自定义类或结构

在处理错综复杂的互连数据集时,创建自定义类或结构可以增强代码的清晰度和组织性。让我们深入研究一个示例,在该示例中,我们定义了一个自定义类,该类被命名为封装计算结果:OperationResult

public class OperationResult  
{  
    public int Sum { get; set; }  
    public int Product { get; set; }  
}

public OperationResult PerformCalculation(int a, int b)  
{  
    return new OperationResult { Sum = a + b, Product = a * b };  
}

var result = PerformCalculation(5, 4);  
Console.WriteLine($"Sum: {result.Sum}, Product: {result.Product}");

5、使用 Ref Return 和 Ref Locals

在需要直接修改数据而不进行不必要的复制的情况下,C# 提供了 ref 返回和 ref 局部变量的概念。让我们来探讨一个实际示例,该示例演示了如何使用 ref returns 在数组中查找和返回对特定名称的引用:

public ref string FindName(string[] names, string target)  
{  
    for (int i = 0; i < names.Length; i++)  
    {  
        if (names[i] == target)  
        {  
            return ref names[i]; // Return a reference to the array element  
        }  
    }    throw new Exception("Name not found");  
}

string[] names = { "Alice", "Bob", "Charlie" };  
ref string foundName = ref FindName(names, "Bob");  
foundName = "Bobby"; // Directly modifies the array  
Console.WriteLine(string.Join(", ", names)); // Outputs: Alice, Bobby, Charlie

实现这些方法不仅增强了代码的可读性和可维护性,而且在处理多个返回值方面提供了灵活性和效率。对于开发人员来说,了解每种技术的优势和用例以在项目中有效利用它们至关重要。

如果你喜欢我的文章,请给我一个赞!谢谢

来源:https://mp.weixin.qq.com/s/LqFX32Cb4YeEQMOBYr23jQ

标签:返回,string,示例,C#,创建,Sum,int,ref,public
From: https://www.cnblogs.com/z5337/p/18166289

相关文章

  • 数据表删除DROP TRUNCATE DELETE区别
    总的来说,DROP用于删除整个数据库对象(表结构和数据全部删除),DELETE用于删除表中的数据,而TRUNCATE也是删除表中的数据,但比DELETE更快,且无法指定条件删除。根据需求,选择适当的命令来删除数据或对象。 DROP:1.DROP用于删除数据库对象,例如表(table)、索引(index)、视图(view)等。2......
  • python使用langchain调用本地大模型
    参考https://www.cnblogs.com/scarecrow-blog/p/17875127.html模型下载之前说过一次https://www.cnblogs.com/qcy-blog/p/18165717也可直接去官网,把所有文件都点一遍fromlangchainimportPromptTemplate,LLMChainimporttorchfromtransformersimportAutoTokenizer,A......
  • 2-ICEM入门练习:梯形切分映射
    前言这一篇主要学习icem的分割以及映射功能。几何采用一个梯形,因为icem创建的block都是长方体,所以需要将block和几何进行一一对应才可以生成网格。因此通过梯形的网格划分来理解block及映射这部分知识。其余部分比如建模等,就不详细描述。具体步骤几何如图:创建block此时......
  • curl多请求脚本
    #!/bin/bash#定义请求URL和数据url="https://api-adservices.apple.com/api/v1"data=""output_file="requests_log.txt"#清空或创建输出文件>"$output_file"#函数用于发送POST请求并记录日志send_post_request(){localrequest_number=$1local......
  • MURF1640CT-ASEMI逆变器专用MURF1640CT
    编辑:llMURF1640CT-ASEMI逆变器专用MURF1640CT型号:MURF1640CT品牌:ASEMI封装:TO-220F正向电流(IF):16A反向电压(VRRM):400V正向电压(VF):0.95V工作温度:-55°C~150°C反向恢复时间:35ns芯片个数:2芯片尺寸:86mil引脚数量:3浪涌电流(IFMS):175A包装方式:50/管1000/盘3000/箱MURF1640CT......
  • openGauss MOT-VACUUM清理
    MOTVACUUM清理使用VACUUM进行垃圾收集,并有选择地分析数据库,如下所示。【openGauss】在openGauss中,VACUUM用于回收死元组占用的存储空间。在正常的openGauss操作中,删除的元组或因更新而作废的元组不会从表中物理删除。只能由VACUUM清理。因此,需要定期执行VACUUM,特别是在频繁......
  • CobaltStrike 远控木马在42.194.250.177的80端口报警;奇安信网神态势感知报警(多次)
    在态势感知上报毒——目的IP:42.194.250.177的80端口。报毒名称为CobaltStrike远控木马活动事件,这个情况发生在已经封禁掉源IP和目的IP的前提下,所以让人百思不得其解。然后我登上了我的kali访问了这个目的IP的80端口,嘿!您猜怎么着?!这不是明摆着,欢迎您的到来嘛!这我不就来了嘛,Dir......
  • PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克
    原文链接:http://tecdat.cn/?p=27099最近我们被客户要求撰写关于蒙特卡罗的研究报告,包括一些图形和统计输出。金融资产/证券已使用多种技术进行建模。该项目的主要目标是使用几何布朗运动模型和蒙特卡罗模拟来模拟股票价格。该模型基于受乘性噪声影响的随机(与确定性相反)变量该项......
  • PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列|附
    全文下载链接:http://tecdat.cn/?p=22617最近我们被客户要求撰写关于MRS的研究报告,包括一些图形和统计输出。本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些结果。它应用了Hamilton(1989)的滤波器和Kim(1994)的平滑器  %matplot......
  • linux6-touch&cat&more
    linux6-touch&cat&moretouch创建文件在/tmp目录下创建test.txt文件touch/tmp/test.txt填写多个参数创建多个文件touchtest1.txttest2.txttest3.txtcatcat,concatnate,查看文件内容查看/etc/目录下的service文件内容cat/etc/servicemore查看文件内容cat......