使用 C# 本地函数,告别冗长难懂的辅助代码

Coding-163.png

前言

嗨,大家好!

你是否曾经在一个方法里写了大量的辅助代码,导致整个方法变得冗长难懂?

或者你可能遇到了一些逻辑,这些逻辑只在这个方法内有用,但为了组织代码,不得不把它们拆分到其他地方。

别担心,C# 的 本地函数 就是为了解决这些问题而设计的。

今天,我们来聊聊 C# 里的本地函数,看看它是如何帮助我们更优雅地编写代码的。

Step By Step 实战例子

现在,让我们通过一个详细具体的例子来感受一下本地函数的魅力吧!

假设我们要计算一个数组中的所有正数的平方和,就可以使用本地函数来优化代码。

1. 创建一个 .NET Core Console 项目

首先,在 VS IDE 中创建一个新的控制台应用程序项目,命名为 LocalFunSample

2. 定义一个计算数组中的正数的平方和的方法

新建一个类文件,在其中定义一个计算一个数组中的所有的正数的平方和的方法,留意其中的本地函数

namespace LocalFunSample
{
    public class LocalFunExample
    {
        /// <summary>
        /// 计算一个数组中的所有正数的平方和
        /// </summary>
        /// <param name="numbers">数值数组</param>
        /// <returns></returns>
        public static int CalcSumOfSquares(int[] numbers)
        {
            // 本地函数:计算单个数的平方
            int Square(int x) => x * x;

            int sum = 0;
            foreach (var number in numbers)
            {
                if (number > 0)
                {
                    sum += Square(number); // 调用本地函数
                }
            }

            return sum;
        }
    }
}
3. 使用

接下来,在 Program.cs 文件中调用这个方法

using LocalFunSample;

int[] numbers = { -1, 2, 3, -4, 5 }; // 测试数组

int result = LocalFunExample.CalcSumOfSquares(numbers); // 调用外部函数

Console.WriteLine($"正数的平方和是: {result}");
4. 运行程序

按 Ctrl+F5 编译并运行程序,你会在控制台看到如下图输出:

Coding-162.png

总结

恭喜你!你已经成功使用了本地函数来简化计算的逻辑,是不是感觉特别简单又有趣呢?

本地函数是 C# 7.0 引入的一种函数定义方式,允许你在另一个方法内部定义一个函数。

也就是说,你可以将一个函数嵌套在另一个函数的作用域内。

这样做主要有以下这些好处:

  • 将复杂的逻辑分解成更小、更有意义的函数块,使得主方法更容易理解
  • 本地函数仅限于其所在的方法中使用,避免了不必要的全局暴露,减少了命名冲突的可能性
  • 由于本地函数与主方法紧密相关,因此在调试时更容易追踪问题的根源
  • 如果某个逻辑在同一个方法中多次出现,可以通过本地函数来复用这段代码,减少重复代码

所以,如果你在日常开发任务中,碰到以下这种场景,就可以考虑使用本地函数:

  • 当方法中需要执行多个相似的计算步骤时,可以将这些步骤封装成本地函数
  • 如果你有一段复杂的条件判断逻辑,可以将其提取到本地函数中,使主方法更加清晰
  • 对于需要在循环体内反复执行的任务,可以使用本地函数帮助你简化逻辑,就像我们这个例子所写的一样
  • 当你需要在一个方法内实现递归算法时,本地函数提供了一个干净的方式来组织代码

总而言之,本地函数可以访问外部函数的参数和局部变量,这使得它们在处理复杂逻辑时特别有用,不妨在你的新项目中或者重构代码时,把它用上吧!

好了,今天的分享就到这里啦,如果觉得有用,别忘了点个【赞与在看】哦,你的支持是我最大的动力!

最后,如果你有更好的想法或建议,欢迎留言讨论!

往期精彩

  1. 把 C# 里的 HttpClient 封装起来,告别复杂的配置,让 Restful API 调用更轻松更高效
  2. C#12 中 5 个节省你开发时间的的改进
  3. C# 静态类,高手不想让你知道的 15 个真相
  4. 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
  5. 用 C# Stopwatch 计时,让代码性能飞起来!
  6. 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
  7. 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
  8. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  9. 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
  10. C# AutoMapper 10个常用方法总结
  11. C# 7个方法比较两个对象是否相等
  12. C# 去掉字符串最后一个字符的 4 种方法

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎点击下方卡片关注老杨的公众号(名称:代码掌控者),更多干货等你来!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值