我正在使用.NET创建AutoCAD的类库。
问题是这些方法是从AutoCAD一个接一个地调用的,第一个读取输入文件并在内存中创建数据列表。但是,当调用新的列表时,列表为空。
我需要找到一个如何保存这些数据的解决方案。 List包含我创建的结构中的数据。方法是独立调用的,但按顺序调用。
简短代码示例:
namespace GeoPjuvis
{
...
public class Program
{
...
//program variables
private List<GeoData> dataList;
private List<DataPoint> points;
private int mapScale;
public Program()
{
dataList = new List<GeoData>();
points = new List<DataPoint>();
}
//Initialization method of the program. Makes praperations. Reads files. Add points to map.
[CommandMethod("geoinit", CommandFlags.Session)]
public void Init()
{
...
}
//method uses data gathered before and selects points
[CommandMethod("selectPoints", CommandFlags.Session)]
public void SelectPoints()
{
...
}...
当我调用SelectPoints()方法时,为什么这些dataList和points列表是空的。以及如何避免这种情况?
答案 0 :(得分:2)
我不知道AutoCAD的编程,但我怀疑它每次都在创建一个新实例。您可以尝试将变量设为静态(例如,类级别):
private static List<GeoData> dataList = new List<GeoData>();
答案 1 :(得分:0)
每次调用方法时是否实例化一个新类? (原谅我,我不熟悉AutoCAD的编码。)尝试使类静态。如果这不起作用,您可以将第一种方法的值返回给AutoCAD,并将它们作为参数发送到下一个方法吗?请记住,这不是性能的最佳解决方案。
另外,作为参考,请看一下C#中的Singleton实现:
答案 2 :(得分:0)
根据您提供的信息,AutoCAD会为每个方法调用创建一个新对象实例吗?这可以解释为什么你的实例变量是空的。
尝试将变量设为静态,并查看数据是否在方法调用中持续存在。
AutoCAD文档是否有编写这些程序的任何说明?
答案 3 :(得分:0)
看起来你正在调用你的类的一个新实例,你可以实现一个单例模式,以确保你总是调用相同的实例,或者保留点并加载它们。
这是c#,http://csharpindepth.com/Articles/General/Singleton.aspx
中Singleton实现的一个很好的链接