sunny~晴 2024-03-17 13:31 采纳率: 80%
浏览 11
已结题

C# 类型转换问题 list集合

C# 二次开发autoCAD,创建了一个方法,将list作为方法的入参,
随后需要在在方法内遍历该数组,而遍历拿到的元素是"System.Collections.Generic.List"
无法转换成所需要的类型"double",尝试强制转换依然报错无法转换
具体问题如下,请指教

img

img

internal static void L绘制线并偏移(Point3d x, Point3d y, List<int>[] 偏移集合)
{
    Document 当前文档 = Application.DocumentManager.MdiActiveDocument;
    Database 当前数据库 = 当前文档.Database;

    using (Transaction 事务 = 当前数据库.TransactionManager.StartTransaction())
    {
        BlockTable 表;
        BlockTableRecord CAD对象;

        /*使用事务管理器启动一个新事务
            使用事务可以确保在操作期间的任何时候发生故障时,所有事务中的操作都将回滚(撤销);
            从而保持数据的一致性和完整性*/
        表 = 事务.GetObject(当前数据库.BlockTableId,
                                        OpenMode.ForRead) as BlockTable;
        CAD对象 = 事务.GetObject(表[BlockTableRecord.ModelSpace],
                                        OpenMode.ForWrite) as BlockTableRecord;

        using (Line 线 = new Line(x, y))
        {
            //将线添加到图形中
            CAD对象.AppendEntity(线);
            事务.AddNewlyCreatedDBObject(线, true);

            for(int i = 0; i <偏移集合.Length; i++)
            {
                DBObjectCollection 偏移对象的集合 = 线.GetOffsetCurves(偏移集合[i]);
                foreach (Entity acEnt in 偏移对象的集合)
                {
                    // Add each offset object
                    // 逐步将对象偏移并加入集合
                    CAD对象.AppendEntity(acEnt);
                    事务.AddNewlyCreatedDBObject(acEnt, true);
                }
            }
        }

        // Commit the changes and dispose of the transaction
        // 保存并销毁事务
        事务.Commit();
    }
}
  • 写回答

3条回答 默认 最新

  • 关注

    qq_20747375 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    根据你提供的代码,问题出在将"System.Collections.Generic.List"转换为"double"的部分。

    问题可能出在以下两行代码:

    DBObjectCollection 偏移对象的集合 = 线.GetOffsetCurves(偏移集合[i]);
    foreach (Entity acEnt in 偏移对象的集合)
    

    在这里,偏移集合的类型是List<int>[],而GetOffsetCurves方法期望传入的参数类型是double。因此,你需要对偏移集合进行转换成double类型。

    解决方案如下:

    1. 创建一个新的List<double>,用于存储转换后的偏移集合。
    2. 遍历原始的偏移集合,将每个元素转换为double类型,并添加到新的List<double>中。
    3. 在调用GetOffsetCurves方法时,将新的List<double>作为参数传递。

    修改后的代码如下:

    internal static void L绘制线并偏移(Point3d x, Point3d y, List<int>[] 偏移集合)
    {
        Document 当前文档 = Application.DocumentManager.MdiActiveDocument;
        Database 当前数据库 = 当前文档.Database;
    
        using (Transaction 事务 = 当前数据库.TransactionManager.StartTransaction())
        {
            BlockTable 表;
            BlockTableRecord CAD对象;
    
            /*使用事务管理器启动一个新事务 使用事务可以确保在操作期间的任何时候发生故障时,所有事务中的操作都将回滚(撤销); 从而保持数据的一致性和完整性*/
            表 = 事务.GetObject(当前数据库.BlockTableId,
                                            OpenMode.ForRead) as BlockTable;
            CAD对象 = 事务.GetObject(表[BlockTableRecord.ModelSpace],
                                            OpenMode.ForWrite) as BlockTableRecord;
    
            using (Line 线 = new Line(x, y))
            {
                //将线添加到图形中
                CAD对象.AppendEntity(线);
                事务.AddNewlyCreatedDBObject(线, true);
    
                for(int i = 0; i < 偏移集合.Length; i++)
                {
                    List<double> 偏移集合Double = new List<double>();
                    foreach (int 偏移值 in 偏移集合[i])
                    {
                        偏移集合Double.Add((double)偏移值);
                    }
    
                    DBObjectCollection 偏移对象的集合 = 线.GetOffsetCurves(偏移集合Double);
                    foreach (Entity acEnt in 偏移对象的集合)
                    {
                        // Add each offset object
                        // 逐步将对象偏移并加入集合
                        CAD对象.AppendEntity(acEnt);
                        事务.AddNewlyCreatedDBObject(acEnt, true);
                    }
                }
            }
    
            // Commit the changes and dispose of the transaction
            // 保存并销毁事务
            事务.Commit();
        }
    }
    

    通过将偏移集合转换为List<double>,然后使用转换后的集合作为参数调用GetOffsetCurves方法,就可以避免类型转换错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 修改了问题 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 2013VS+2016IVF 为什么不能生成解决方案,会报找不到指定文件
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 为什么我安装了Homebrew之后,无法像官网的那样通过执行命令安装Watchman
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参