明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1352|回复: 6

[基础] C# 一个小错误不知道怎么解决

[复制链接]
发表于 2010-12-1 13:50:27 | 显示全部楼层 |阅读模式
原代码如下,(.net2008 +AutoCAD 2010)
函数定义为public ObjectId createLayer(),返回return layerId;编译成功,但CAD中加载后异常终止子
函数定义为public void createLayer(),无返回值,则正常运行

以上两种函数,若加入try……catch……finally之后(如注释),则编译通不过“使用了未赋值的变量layerId”

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Colors;
namespace Lab1
{
    public class Class1
    {
        #region Create Layer
        [CommandMethod("creatlayer")]
        public ObjectId createLayer()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ObjectId layerId;
            Database db = HostApplicationServices.WorkingDatabase;
            Transaction tran;
            tran = db.TransactionManager.StartTransaction();
           
            //try
            //{
                LayerTable lt = (LayerTable)tran.GetObject(db.LayerTableId, OpenMode.ForWrite);
                if (lt.Has("EmployeeLayer"))
                {
                    layerId = lt["EmployeeLayer"];
                }
                else
                {
                    LayerTableRecord ltr = new LayerTableRecord();
                    ltr.Name = "EmployeeLayer";
                    ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2);
                    layerId = lt.Add(ltr);
                    tran.AddNewlyCreatedDBObject(ltr, true);
                }
                tran.Commit();
            //}
            //catch
            //{
                ed.WriteMessage("Error ");
            //}
            //finally
            //{
                tran.Dispose();
            //}
            return layerId;
        }
        #endregion
    }
}

发表于 2010-12-1 13:59:17 | 显示全部楼层
函数定义为public void createLayer()

去掉return layerId;
 楼主| 发表于 2010-12-1 14:10:59 | 显示全部楼层
恩,直接void没有问题。
我想知道,若我要定义一个带ObjectId类型返回值的函数,应该怎么做啊
发表于 2010-12-1 14:21:58 | 显示全部楼层
命令函数,即带有CommandMethod属性的函数,只能是void
定义一个带ObjectId类型返回值的函数,那就去掉这个属性
 楼主| 发表于 2010-12-1 14:39:12 | 显示全部楼层
o,原来如此,谢谢
try……catch……finally的问题咋办
发表于 2010-12-1 14:55:17 | 显示全部楼层
        public ObjectId createLayer()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ObjectId layerId = ObjectId.Null;
            Database db = HostApplicationServices.WorkingDatabase;
            Transaction tran;
            tran = db.TransactionManager.StartTransaction();

            try
            {
                LayerTable lt = (LayerTable)tran.GetObject(db.LayerTableId, OpenMode.ForWrite);
                if (lt.Has("EmployeeLayer"))
                {
                    layerId = lt["EmployeeLayer"];
                }
                else
                {
                    LayerTableRecord ltr = new LayerTableRecord();
                    ltr.Name = "EmployeeLayer";
                    ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2);
                    layerId = lt.Add(ltr);
                    tran.AddNewlyCreatedDBObject(ltr, true);
                }
                tran.Commit();
            }
            catch
            {
                ed.WriteMessage("Error ");
            }
            finally
            {
                tran.Dispose();
            }
            return layerId;
        }
 楼主| 发表于 2010-12-1 15:45:38 | 显示全部楼层
谢谢!
ObjectId layerId = ObjectId.Null;
我之前尝试写了ObjectId layerId = Null;出错,咋没想到呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:43 , Processed in 0.151241 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表