Coder 发表于 2015-5-22 06:48:12

获取线路长度

大家好,
我在foreach函数中的变量len出现了一个错误,有人能告诉我为什么会出现这个错误吗
感谢

公共静态void lineLength()
{
文档Adoc=Application.DocumentManager.MdiActiveDocument
数据库db=Adoc.Database
编辑器ed=Adoc.Editor
双透镜;
ed.WriteMessage(“\n选择行:”)
TypedValue[]Tvals=new-TypedValue[]{new-TypedValue(0,“行”)}
选择过滤器ssf=新选择过滤器(Tvals)
PromptSelectionOptions opt=new-promptsselectionoptions()
PromptSelectionResult psr=ed.GetSelection(opt,ssf)
如果(psr.Status==PromptStatus.OK&&psr.Value.Count>0)
使用(Transaction trans=db.TransactionManager.StartTransaction())
{
foreach(在psr.Value中选择对象项)
{
Line Line=(Line)trans.GetObject(item.ObjectId,OpenMode.ForWrite)
len+=行。长度;//
}
ed.WriteMessage(“行的长度:”+len.ToString())
trans.Commit()
}
}
**** Hidden Message *****

Kerry 发表于 2015-5-22 07:10:07

进入调试模式,在line=语句中放置一个断点,在迭代psr...时检查您的变量值,这可能会有所帮助。
BTW。
一个更便宜的过程是在循环之外声明行变量,并在迭代时分配一个值,而不是在每一步声明和分配
...更重要的是...你为什么要将getObject强制为Line...你的选择过程不是确保它是一条线吗??
补充:你为什么要将OpenMode设置为ForWrit??

gile 发表于 2015-5-22 07:16:36

嗨,
你什么时候(或在哪里)叫tr.Commit()?

Coder 发表于 2015-5-22 07:28:54

你好,Kerry,
我正在循环过程中分配一个新的line对象来获取length属性,这是我目前知道的唯一方法。
你好gile,
我知道这个程序中不需要提交,因为这些代码没有添加新的对象。
它在那里的原因是,我开始从另一个程序编写程序,却忘记从新程序中删除它。

Kerry 发表于 2015-5-22 07:36:19

程序员,
你在这两点上都是不正确的。
再读一遍我写的东西。多重分配和多次声明/分配之间是有区别的。
提交是有利的......它更快,更安全。在过去的10年左右的时间里,这一直是这里和其他地方许多长期讨论的原因。

gile 发表于 2015-5-22 08:32:41

编码器,
首先,原谅我的回复,我误读了你的代码。
第二,听从Kerry的建议。
第三,将光标放在len变量上(发生错误的那一行),visual studio应该会显示一个工具提示,告诉您哪种错误...

Coder 发表于 2015-5-22 12:25:53

嗨,
我无法运行该程序,因为我收到一条消息(存在构建错误。你想要...吗?....etc Yes / No)
这种情况下如何测试程序?

Jeff_M 发表于 2015-5-22 12:33:27

您不初始化 len 符号。
双伦;
将其更改为
双 len= 0;

Coder 发表于 2015-5-22 12:49:07


嗨,Jeff_M
从昨天开始,我就对这个错误感到头疼,现在一切都解决了。
非常感谢您。

gile 发表于 2015-5-22 12:49:54


要执行我的建议,您不需要运行程序。大多数“编辑时间”错误由Visual Studio显示,并在错误下方用红色波浪线标出。
页: [1] 2
查看完整版本: 获取线路长度