浅谈C#中的#region指令

高熵合金AlCoCrFeNi/金刚石摩擦案例代码 本文介绍金刚石与高熵合金AlCoCrFeNi摩擦的案例。 在之前的文章中,介绍过使用fix indent命令实现虚拟球的摩擦,本文介绍使用金刚石实体球实现高熵合金摩擦的方法。 主要的模拟过程如下: (1)基体建模 建使用原子替换法获得高熵合金初始模型,升温到3000K驰豫后,冷却至300K,获得平衡组织。 (2)摩擦球建模 在高熵合金平衡组织的模型中添加金刚石摩擦球,使用change_box命令扩大box尺寸,添加金刚石摩擦球,并设置混合力场。 (3)摩擦过程 摩擦球下压一定深度后,沿y方向进行摩擦,摩擦 阅读详情
AI摘要

本文探讨了在代码中使用#Region指令的最佳实践。建议将其用于组织代码结构而非隐藏复杂逻辑,并提出应考虑将复杂逻辑提取为单独的方法或类。同时,介绍了如何合理地使用#Region来改善代码的可读性和维护性。

转自:http://www.163ns.com/help/post/5357.html


本文将讨论如何在代码中正确的使用它。使用#region就是将一些有关联的代码组织在一起,然后折叠起来。这样你就在一个函数中看不到很长很长的代码段。例如:

public void DoSomething()  
{    
bool shouldIDoSomething;    
#region Decide if I should do something  
if(needToDoSomething && haventDoneSomethingThisDay)  
shouldIDoSomething = true;   
 else    
{  
// do some other logic to decide and 
set shouldIDoSomething to some value 
  }   
#endregion    
if(shouldIDoSomething)    
{done++;  }} 

当然这段代码很简单。在实际项目中,你可能看到上百行甚至更多的代码在一个#region中。如果把它折叠起来。看起来就会很整洁。是吧?

public void DoSomething()  
{    
bool shouldIDoSomething;     
[Decide if I should do something]     
if(shouldIDoSomething)    
{done++;    
}} 
我们只是把一些代码和一些变量组合起来放在#region中。如果你在仔细想想,其实我们相当与创建了一个新的函数,只是将这些方法内置到当前方法中。一个函数只做单一的一件事情,这是Clean Code这本书的一个原则。为什么我们不把它提取为一个方法呢,这样一来,一个函数就只做一件事情了。
public void DoSomething(){    
if(ShouldIDoSomething())   
 {done++;  }}   
private bool ShouldIDoSomething(){    
if(needToDoSomething && haventDoneSomethingThisDay)  
shouldIDoSomething = true;    
else   
 {  
// do some other logic to decide  
and set shouldIDoSomething to some value  }} 

这样看起来就清楚很多,因为我们降低了之前的DoSomething函数的复杂度。两个函数可以分开测试,确保没有逻辑错误。
小段总结1:  #region 不适合在大方法中使用,当你在一个方法中使用#region 的时候,停下来想想你刚刚写了什么代码?大多数时候,你可以将这些代码段独立成一个函数。

看看下面这段非常漂亮的代码:

#region Get Customer  
public void GetCustomer(){    
// code to get the customer}  
#endregion  
#region Save Customer  
public void SaveCustomer(){    
// code to save the customer}  
#endregion 

将它折叠之后,变成下面这样:

[Get Customer] [Save Customer] 
这样做很容易阅读吗?这样做的目的是什么,我不明白?代码折叠就会变得更好?我觉得这样做只会让代码更难以阅读,因为你每次要看region中的代码,你都要展开一次。

小段总结2:不要因为你能,你就使用#region 。

再看下面这个例子
public class PriceCalculator{    
public decimal CalculatePrice()    
{decimal price = 100m;decimal discount = CalculateDiscount();  
return price * (1m - discount));   
 }    
#region Discount Calculation    
private void CalculateDiscount()    
{decimal discount = 0m;   
if(CanApplyDiscount())    
discount = 0.05m;   
return discount;   
 }     
private void CanApplyDiscount()  {  
// some logic, other method calls  }    
// some other discount calculation methods  ...    
#endregion} 

如果你将这个例子和本文中的第一个例子做下比较,你可能会看到它们的共同点。他们是相同的,不过一个是在类中,一个是在函数中,层级不同而已。这里在提一个原则:单一职责原则,一个类应该只有一个职责。看上面的类,你可以很容易看出它有两个职责:价格计算和折扣计算。折扣计算的方法被放到一个#region中。同样,可以将它们提取出来做为一个新类。

小段总结3:可以将一组相关的函数提取到一个职责单一的新类中。

那我们到底怎么使用 #region 呢。将东西用它来分组,它是非常有用的。在我写的类中或多或少有几个regions,用来对类中不同的结构进行分组。比如: fields, properties, methods, events, types等。如果你打开我写的类文件,你会看到结构如下:

public class SomeClass{  
[Events]  
[Fields]  
[Properties]   
[Methods]} 

总的来说:我将region看成能控制阅读源代码的复杂度的一种方式。因为你可以将一些相关的代码放在一个区域(region)里面。但是,这不是随便就创建的新的方法或者新类的借口。其实Region并不能消除复杂度,它只是在你阅读代码的时候,隐藏了部分代码。你必须通过写出小巧,清晰,重点突出的方法和类,才能控制代码的复杂度。当你做到这些的时候,你甚至会发现region是不必要的。


有关预处理指令的文章:http://www.cnblogs.com/yinhaiming/articles/1445115.html

python基础知识补充 1. jupyter notebook 解释 2. ipython 魔法命令 3. latex in Markdown cell(在markdown里面编写数学公式) 4. jupyter notebook功能扩展:安装Nbextension 5. python解释与运行 6. 垃圾回收(计数机制与分代回收机制) 7. 名字空间与局部作用域L和全局作用域G 8. 小整数缓存区与字符驻留 9. Statement &Expression 10. 调试 阅读详情

相关推荐

Unity中实现FairyGUI弹窗背景模糊的3种方法对比(附完整代码)

本文详细对比了Unity中实现FairyGUI弹窗背景模糊的3种方法,包括FairyGUI原生滤镜方案、多摄像机混合渲染方案和渲染纹理动态混合方案。每种方法均附有完整代码示例,帮助开发者根据项目需求选择最佳方案,实现镜头虚化模糊效果,提升游戏UI的视觉沉浸感。

ff678的博客 230

#region

利用 #region,可以指定在使用 Visual Studio Code 编辑器的大纲功能时可展开或折叠的代码块。 在较长的代码文件中,能够折叠或隐藏一个或多个区域会十分便利,这样,可将精力集中于当前处理的文件部分。 #region 分页列表展示 public ActionResult Index() { int pageIndex =...

飞鸿的博客 2万+

Word | 简单可操作的快捷公式编号、右对齐和引用方法

在理工科论文的写作中,涉及到大量的公式输入,我们希望能够按照章节为公式进行编号,并且实现公式居中,编号右对齐的效果。网上有各种各样的方法来实现,操作繁琐和简单的混在一起,让没有接触过公式编号的人感觉比较混乱。笔者自己博览相关博客,亲身实践,总结出一套自认为比较简便的公式编号、对齐和引用方法,在这里分享给大家~

qq_43466146的博客 3万+

C#中的#region和#endregion指令:代码组织与折叠的艺术

region:用于标记一段代码的开始,可以后跟一个可选的描述性名称,该名称用于表示该区域所包含的代码的功能或逻辑分组。#endregion:用于标记一段代码的结束,与#region对应,标志着该代码区域的终止。

学习和分享 3050

Agent测试框架Harbor指南

Harbor是一个AI Agent单元测试框架,用于自动化测试AI代理在容器环境中的任务执行能力。它支持18+种AI代理,通过沙箱隔离和自动验证机制评估任务完成情况。任务必须具有可编程验证的输出结果,适合代码、数据、系统等可量化任务,不适合创意写作等主观任务。Harbor采用CLI操作方式,核心架构包含Job管理、Trial执行和验证器三个层级,执行流程包括环境启动、Agent执行和结果验证。任务目录包含指令文件、配置文件、Docker环境定义和测试脚本等必需组件,通过测试脚本自动判断任务完成质量。

loo_Charles_ool的博客 1386

无线控制的隐形桥梁:深入解析NRF24L01在电机控制中的数据传输艺术

本文深入解析NRF24L01无线模块在电机控制中的数据传输技术,涵盖通信机制优化、抗干扰策略及实时性保障。通过舵机和无刷电机的实战案例,展示如何构建稳定高效的无线控制系统,为嵌入式开发提供完整解决方案。

j7k8l的博客 332

#region和#endregion

并不是所有编程语言或编辑器/IDE 都支持的原生特性。它们通常是编辑器/IDE 提供的功能,用于在代码编辑器中创建可折叠的代码区域。因此,具体使用方法和效果可能因编程语言、编辑器/IDE 的不同而有所变化。建议查阅相应的文档或编辑器/IDE 的帮助文档以了解详细信息和如何使用这些注释标记。它们的主要目的是帮助开发人员在长或复杂的代码块中进行代码的组织和导航,以提高代码的可读性和可维护性。这种注释标记的语法与具体编程语言相关。以下是几种编程语言中使用。里遇到的代码注释了但是又展开的情况。

chen的博客 2363

记一次Nacos线程数飙升排查

Nacos线程飙升问题排查

叭嘣的博客 2631

C# VS2019 #region和#endregion的使用

   #region和#endregion 是自定义折叠区域的一个宏定义方法,在代码较多时,我们通常将同类的代码归类,然后将其框在一对#region和#endregion之间。对于较大一点的工程来说非常好用,非常方便自己管理代码。   #region表示区域开始,同行右侧上描述名称,#endregion则是区域结尾标识。折叠前后如下图一所示:图一 折叠前图二 折叠后  可以使用点击区域首行左边的加减符来展开和折叠你的区域。  批量操作最为关键,可以是通过右键或者快捷方式来全部折叠后(见图三)......

C/C#、Android driver、STM32、Linux等等。 9299

解决[WARN] : Controller Spawner couldn‘t find the expected controller_manager ROS interface.思路

rrbot例程ros_control配置问题的解决思路 本人刚入门ROS机器人开发,在学习rrbot例程出现了control_manager无法启动的bug。 在启动rrbot_control.launch的时候,出现下列warning: [WARN] [1594362016.372059]: Controller Spawner couldn't find the expected controller_manager ROS interface. 之后再按教程的步骤 rosservice call /

qq_40299650的博客 1万+

【AI 智能体】Windows 环境 Hermes Agent(爱马仕)安装详细过程

Windows 环境 Hermes Agent(爱马仕)安装详细过程

congge_study的博客 1824

C# 里面的 #region 是什么意思?

http://www.cnblogs.com/jasonwbd/articles/1162947.html

normal_cai的专栏 920

基于Simulink的BCH码编解码仿真建模示例

BCH码是一类循环码,能够纠正一定数量的随机错误。灵活性:可以根据需要选择不同的码长和纠错能力。高效性:适用于短码长和中等码长的场景,广泛用于卫星通信、存储系统等。实现简单:编码和解码过程可以通过硬件或软件高效实现。在本示例中,我们将使用MATLAB/Simulink中的和模块来完成BCH码的编解码操作,并通过仿真验证其误码率(BER)性能。通过本指南,我们介绍了如何基于Simulink搭建一个BCH码的编解码模型,并进行了仿真以验证其性能。背景介绍:理解BCH码的基本原理及其在通信系统中的应用。

xiaoheshang_123的博客 188

C#学习-阶段总结一

Preface: 经过一段时间的视频的洗礼,逐渐对C#有了一定的了解。及时总结是对学习的反复的奠基,所以今天来浅谈一下什么是C#,以及C#的相关特性,以便后续回顾之用!~

天天开心鸭! 523

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Unity3DTraining 之 Unit4Unity:基于 Editor Test Runner 的 Unity 单元测试实战指南

单元测试是保证游戏核心逻辑(血量、伤害、背包、AI 状态机等)稳定可靠的重要手段,但在 Unity 开发中常因生命周期、协程、物理等机制而被人忽视。本指南以仓库 `Unit4Unity` 目录下的实战案例为主线,完整演示如何在 Unity 中借助内置的 **Editor Test Runner** 编写并运行基于 NUnit 的单元测试:从被测类 `Player` 的设计、`[Test]` 测试方

gitblog_00381的博客 201

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

#Region 指令

vb.net教程https://www.xin3721.com/eschool/vbnetxin3721/ 折叠并隐藏 Visual Basic 文件中的代码节。 复制 #Region "identifier_string" #End Region 部件 术语 定义 identifier_string 必选。 当区域折叠时作为区域标题的字符串。 默认情况下区域是折叠的。 #End Region

chinaherolts2008的博客 2241

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Unity Tips 之 C#区域代码折叠

C#中表示一块区域用#region 和 #endregion ,这样在 Visual Studio 中可以将这块区域的代码折叠起来,便于查看。 using System.Collections; using System.Collections.Generic; using UnityEngine; using System; namespace AFramework { publ...

elegentbeauty的博客 779

C# #region简单使用

#region 是 C#预处理器指令。 #region 是一个分块预处理命令,它主要是用于编辑器代码的分块,在编译时会被自动删除。 #region 使您可以在使用VisualStudio代码编辑器的大纲显示功能时指定可展开或折叠的代码块。 简单来说,就是将复杂的代码块折叠,是界面看起来整洁一些 #region用法: #region说明 Program #endregion 作用: (1)注释其中间的代码段 (2)折叠中间的代码块(折叠后的说明文字为#re...

进阶的小白 1万+

用好#region指令实现良好的代码组织

这篇文章我将不会去介绍如何使用#region指令。因为每个C#开发人员都应该见过和使用过#region指令的。这篇文章将讨论如何在代码中正确的使用它。使用#region就是将一些有关联的代码组织在一起,然后折叠起来。这样你就在一个函数中看不到很长很长的代码段。例如: public void DoSomething()   {     bool shouldIDoSomet...

程序员天空 736

C#之预处理器指令

和 是 C# 语言中的预处理器指令,主要用于代码组织和折叠功能,它们在 Visual Studio 编辑器或其他支持此功能的开发环境中特别有用。 标记用于标记一段代码的开始,后面可以跟一个可选的描述性名称。这个名称用于表示该区域所包含的代码的功能或逻辑分组,如“ClassDefinition”、“Methods”、“EventHandlers”等。 标记则是对应 的结束标记,它标志着该代码区域的终止。在 Visual Studio 中,当你放置了 和 之间的代码时,可以通过编辑器工具栏、菜单或者快捷

weixin_51186282的博客 2731

C# 里面的 #region 是什么意思? (转载)

#region是c#预处理器指令。 #region是一个分块预处理命令,它主要用于编辑代码的分段,在编译时会被自动删除。 #region使你可以在使用VS代码编辑器的大纲显示功能时指定可展开或折叠的代码块。 例如: #region  MyClass definition public class MyClass {    static void Main()      {    ...

JavaEE架构与开发 760

C#中 #region指令

#region是一个分块预处理命令,它主要用于编辑代码的分段,在编译时会被自动删除。     #region使你可以在使用VS代码编辑器的大纲显示功能时指定可展开或折叠的代码块。     例如:         #region  MyClass definition         public class MyClass         {            static void ...

weixin_34280237的博客 1018

C#学习--#region使用技巧

2. #region 不适合在大方法中使用,当你在一个方法中使用#region 的时候,停下来想想你刚刚写了什么代码?大多数时候,你可以将这些代码段独立成一个函数。region可以看成控制阅读源代码的复杂度的一种方式。在遇到需要分组的情况下使用#region会非常有用。用来对类中不同的结构进行分组。#region与#endregion搭配使用,用来隐藏一段代码,使整体代码更加简洁。1.不要为了使用#region而使用,有时并不会显得简洁。代码完成后,region旁会出现可以隐藏的标志。

Kiana_kaslana_66的博客 717

C#的region注释

C# 里面的 #region 表示折叠注释,可以将代码折叠。 C# 中的 #region 表示一块区域,这样在 Visual Studio 中可以将这块区域的代码折叠起来,便于查看。可以点击左侧行数旁边的+/-,展开/隐藏代码。在隐藏的时候,当光标放放置在备注上面的时候,VS会显示出隐藏的代码内容。#region 后面可以跟任意文字以对该区域进行说明。 格式: #region 说明 代码 #endregion 快捷键 :Ctrl + M + L 把当前页的代码合起来, Ctrl + M + M 只把最

weixin_43825473的博客 6361

C#中,#region和#endregion

在C#中,#region和#endregion是一对预处理器指令,用于在Visual Studio等IDE中标记可折叠或展开的代码块,以便更好地组织和管理较长的代码文件。需要明确的是,#region和#endregion指令仅用于代码的组织和折叠,它们本身并不具备条件编译等语义含义,也不会影响代码的编译和执行。‌折叠显示‌:在IDE的大纲显示功能中,可以折叠或隐藏一个或多个区域,便于开发者将精力集中于当前处理的文件部分。‌代码组织‌:通过将相关功能或逻辑的代码组织在一起,使代码结构更加清晰。

chinalog的专栏 477
上一篇: Application常用判断函数
下一篇: 静态构造函数(C# 编程指南)
骑行的蜗牛
博客等级 码龄21年 107粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值