C# 一个小错误不知道怎么解决
原代码如下,(.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
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
}
}
函数定义为public void createLayer()
去掉return layerId; 恩,直接void没有问题。
我想知道,若我要定义一个带ObjectId类型返回值的函数,应该怎么做啊 命令函数,即带有CommandMethod属性的函数,只能是void
定义一个带ObjectId类型返回值的函数,那就去掉这个属性 o,原来如此,谢谢
try……catch……finally的问题咋办 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;
} 谢谢!
ObjectId layerId = ObjectId.Null;
我之前尝试写了ObjectId layerId = Null;出错,咋没想到呢。
页:
[1]