You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将代码中的#region区域作为变量用于日志输出?

结论与解决方案

不行,C#里没法直接用#currentregion这种语法获取当前#region的名称。

原因

#region只是编辑器层面的代码折叠语法糖,编译阶段会被完全剔除,编译后的程序集里不会保留任何关于#region的信息,所以运行时根本无法读取到它的名称。

替代方案

如果你想避免重复手写区域名称、减少冗余代码,可以试试这两种方式:

1. 定义字符串常量复用

把每个区域的名称定义成常量,在catch块里直接引用:

private const string OrdersAndSubOrdersRegion = "Orders and SubOrders";
private const string CustomersRegion = "Customers";

#region Orders and SubOrders
try
{
    ... // 清理Orders和SubOrders的代码
}
catch (Exception ex)
{
    _logger.Error($"An exception occurred while cleaning [{OrdersAndSubOrdersRegion}]. Error message=[{ex.Message}]");
}
#endregion

#region Customers
try
{
    ... // 清理Customers的代码
}
catch (Exception ex)
{
    _logger.Error($"An exception occurred while cleaning [{CustomersRegion}]. Error message=[{ex.Message}]");
}
#endregion

2. 封装通用日志清理方法

把清理逻辑和日志逻辑封装成通用方法,将实体名称作为参数传入:

private void ExecuteCleanupWithLogging(string entityName, Action cleanupAction)
{
    try
    {
        cleanupAction();
    }
    catch (Exception ex)
    {
        _logger.Error($"An exception occurred while cleaning [{entityName}]. Error message=[{ex.Message}]");
    }
}

// 调用示例
#region Orders and SubOrders
ExecuteCleanupWithLogging("Orders and SubOrders", () =>
{
    ... // 清理Orders和SubOrders的代码
});
#endregion

#region Customers
ExecuteCleanupWithLogging("Customers", () =>
{
    ... // 清理Customers的代码
});
#endregion

内容的提问来源于stack exchange,提问作者Dominique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:42:12