在 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 中完全可以且推荐使用 $ 符号进行字符串插值,它能显著提升代码的可读性和可维护性。