$符号在WriteMessage中有效

在 AutoCAD .NET API 的 Editor.WriteMessage 方法中,$ 符号(字符串插值)是起作用的,但前提是您使用的 C# 编译器版本支持该语法(C# 6.0 及以上)。

$ 符号是 C# 的字符串插值语法糖,它会在编译时被转换为对 String.Format 的调用。由于 WriteMessage 方法接受一个 string 类型的参数,因此完全兼容这种写法。

代码示例对比

以下两段代码在功能上是完全等效的:

1. 使用 $ 字符串插值(C# 6.0+)

csharp 复制代码
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

public class TestCommands
{
    [CommandMethod("TestInterpolation")]
    public void TestInterpolation()
    {
        Document doc = Application.DocumentManager.MdiActiveDocument;
        Editor ed = doc.Editor;

        string userName = "张三";
        int objectCount = 42;
        double area = 1234.56;

        // 使用 $ 进行字符串插值,清晰易读
        ed.WriteMessage($"
用户 {userName} 您好!
");
        ed.WriteMessage($"当前处理了 {objectCount} 个对象。
");
        ed.WriteMessage($"计算得到的总面积为:{area:F2} 平方米。
");
    }
}

2. 使用传统的 String.Format 方法

csharp 复制代码
// ... 省略相同的命名空间和对象获取代码 ...

[CommandMethod("TestStringFormat")]
public void TestStringFormat()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Editor ed = doc.Editor;

    string userName = "张三";
    int objectCount = 42;
    double area = 1234.56;

    // 使用 String.Format,语法相对繁琐
    ed.WriteMessage(String.Format("
用户 {0} 您好!
", userName));
    ed.WriteMessage(String.Format("当前处理了 {0} 个对象。
", objectCount));
    ed.WriteMessage(String.Format("计算得到的总面积为:{0:F2} 平方米。
", area));
}

关键要点| 方面 | 说明 |

| :--- | :--- |

| 编译要求 | 项目必须使用支持 C# 6.0 或更高版本的 .NET Framework(如 .NET Framework 4.6+)进行编译。 |

| 本质 | $"文本{变量}" 在编译后等同于 String.Format("文本{0}", 变量)WriteMessage 最终接收到的就是一个格式化好的普通字符串。 |

| 优势 | 插值语法更直观,尤其当需要嵌入多个变量时,无需手动管理参数索引(如 {0}, {1}),减少了出错概率。 |

| 性能 | 两者在运行时性能上几乎没有差异,因为插值字符串在编译阶段就已完成转换。 |

| 格式控制 | 在 {} 内可以使用格式说明符,例如 {area:F2} 表示保留两位小数,这与 String.Format 的格式字符串完全兼容。 |

应用场景示例字符串插值在 WriteMessage 中常用于动态生成包含变量信息的提示、调试或结果报告:

csharp 复制代码
// 场景:在循环中报告进度
for (int i = 0; i < totalSteps; i++)
{
    // 使用插值生成进度信息
    ed.WriteMessage($"正在处理第 {i + 1}/{totalSteps} 步...
");
    // ... 执行操作 ...
}
// 最终报告
ed.WriteMessage($"
处理完成!共成功更新了 {successCount} 个实体。
");

结论 :只要您的开发环境配置正确,在 Editor.WriteMessage 中完全可以且推荐使用 $ 符号进行字符串插值,它能显著提升代码的可读性和可维护性。