gpt4 book ai didi

c# - 在 C# 中将父类强制转换为子类

转载 作者:行者123 更新时间:2023-11-30 20:46:35 25 4
gpt4 key购买 nike

我正在使用 C# 和 .NET Framework 为 AutoCAD 2014 编写插件。我像这样扩展了 Autodesk 的 Table 类:

public class OpeningDataTable : Autodesk.AutoCAD.DatabaseServices.Table

我的想法是,我想将已经在 AutoCAD 绘图上绘制的表格作为 OpeningDataTable 的实例从绘图中拉出,这样我就可以使用我编写的方法来操作数据。我是这样做的:

OpeningDataTable myTable = checkForExistingTable(true);

public Autodesk.AutoCAD.DatabaseServices.Table checkForExistingTable(bool isWindow)
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; //Current drawing
Transaction tr = doc.TransactionManager.StartTransaction();
DocumentLock docLock = doc.LockDocument();
TypedValue[] tableItem = new TypedValue[] { new TypedValue(0, "ACAD_TABLE") };
SelectionFilter tableSelecFilter = new SelectionFilter(tableItem);
Editor ed = doc.Editor; //Editor object to ask user where table goes, subclass of Document

using (tr)
{
PromptSelectionResult selectResult = ed.SelectAll(tableSelecFilter);
if (selectResult.Status == PromptStatus.OK)
{
SelectionSet tableSelSet = selectResult.Value;
for (int i = 0; i < tableSelSet.Count; i++)
{
Autodesk.AutoCAD.DatabaseServices.Table tableToCheck = (Autodesk.AutoCAD.DatabaseServices.Table)tr.GetObject(tableSelSet[i].ObjectId, OpenMode.ForRead);
String tableTitle = tableToCheck.Cells[0, 0].Value.ToString();
if(tableTitle.Equals("Window Schedule") && isWindow == true)
return (OpeningDataTable)tableToCheck;
if (tableTitle.Equals("Door Schedule") && isWindow == false)
return (OpeningDataTable)tableToCheck;
}
}
return null;
}
}

但是,我收到一条错误消息,提示我无法将 Table 对象(父类)转换为 OpeningDataTable 对象(子类)。

这个问题有简单的解决方法吗?

最佳答案

您需要为 OpeningDataTable 创建一个以 Table 作为参数的构造函数。

不能将 Table 转换为 OpeningDataTable 的原因是 Table 不是 OpeningDataTable就像 object 不是 int 一样。

关于c# - 在 C# 中将父类强制转换为子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26692925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com