乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 258|回复: 7

C#10 并非所有代码都工作正常

[复制链接]

14

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2022-8-2 08:58:11 | 显示全部楼层 |阅读模式
我在autocad 2019 64位中的visual studio 2022中测试了C#10,但并非所有代码都工作正常。在我的代码的最后一部分中的数组索引示例
请参见快照
如何使所有代码在C#10中正常工作
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Autodesk.AutoCAD.ApplicationServices.Core;
  7. using Autodesk.AutoCAD.DatabaseServices;
  8. using Autodesk.AutoCAD.Geometry;
  9. using Autodesk.AutoCAD.Runtime;
  10. using Autodesk.AutoCAD.EditorInput;
  11. using CadApp = Autodesk.AutoCAD.ApplicationServices.Application;
  12. using Autodesk.AutoCAD.DatabaseServices.Filters;
  13. using System.Collections;
  14. using static cadtest22_1.PersonClass;
  15. namespace cadtest22_1
  16. {
  17.     //1.test create struct Tipe T
  18.     public struct Foo
  19.     {
  20.         public T Var1;
  21.         public T Var2;
  22.     }
  23.     public struct Point
  24.     {
  25.         public double X { get; set; }
  26.         public double Y { get; set; }
  27.         public double Distance => Math.Sqrt(X * X + Y * Y);
  28.         public override string ToString() =>
  29.             $"({X}, {Y}) is {Distance} from the origin";
  30.     }
  31.     //2. test record
  32.     public class PersonClass
  33.     {
  34.         public string Name { get; }
  35.         public string Surname { get; set; }
  36.         public record PersonRecord
  37.         {
  38.             public string Name { get; set; }
  39.             public string Surname { get; set; }
  40.             public PersonRecord(string name, string surname)
  41.             {
  42.                 Name = name;
  43.                 Surname = surname;
  44.             }
  45.             public void Deconstruct(out string name, out string surname)
  46.             {
  47.                 name = Name;
  48.                 surname = Surname;
  49.             }
  50.         }
  51.     }
  52.     public class Class1
  53.     {
  54.       
  55.         //3.test call
  56.         int M()
  57.         {
  58.             int y = 5;
  59.             int x = 7;
  60.             return Add(x, y);
  61.             static int Add(int left, int right) => left + right;
  62.         }
  63.         
  64.         [CommandMethod("test")]
  65.         public void test1()
  66.         {
  67.             var doc = CadApp.DocumentManager.MdiActiveDocument;
  68.             var ed = doc.Editor;
  69.             var db = doc.Database;
  70.             //call struct foo
  71.             var d = new Foo[i] { Var1 = 1, Var2 = 2 };          //ok
  72.             var dd = new Foo { Var1 = 1.1, Var2 = 20.1 }; //ok
  73.             CadApp.ShowAlertDialog($"struct foo T {d.Var1} - {d.Var2}");       //ok
  74.             // test switch multiple variable
  75.             string RockPaperScissors(string first, string second)
  76.          => (first, second) switch
  77.          {
  78.              ("rock", "paper") => "rock is covered by paper. Paper wins.",
  79.              ("rock", "scissors") => "rock breaks scissors. Rock wins.",
  80.              ("paper", "rock") => "paper covers rock. Paper wins.",
  81.              ("paper", "scissors") => "paper is cut by scissors. Scissors wins.",
  82.              ("scissors", "rock") => "scissors is broken by rock. Rock wins.",
  83.              ("scissors", "paper") => "scissors cuts paper. Scissors wins.",
  84.              (_, _) => "tie"
  85.          };
  86.             CadApp.ShowAlertDialog($"{RockPaperScissors("rock","paper")}");
  87.             //add function without aggregate,action
  88.             int M()
  89.             {
  90.                 int y = 5;
  91.                 int x = 7;
  92.                 return Add(x, y);
  93.                 static int Add(int left, int right) => left + right;
  94.             } //ok
  95.             //test multiple switch
  96.             static int GetTax4(int muncipalityId) => muncipalityId switch
  97.             {
  98.                 0 or 1 => 20,
  99.                 > 1 and  21,
  100.                 > 5 and not 7 => 22,
  101.                 7 => 23,
  102.                 _ => 20
  103.             };
  104.             CadApp.ShowAlertDialog("value switch " + GetTax4(6).ToString());//ok
  105.             // test switch to autocad
  106.             static string ent(Entity myent) => myent.GetType().Name.ToString() switch
  107.             {
  108.                "Line" or "Polyline" or "Circle" => "curve",
  109.                _ => "Not curve"
  110.             };
  111.             var ge = ed.GetEntity("\nclick entiti");
  112.             if (ge.Status != PromptStatus.OK) return;
  113.             using(var tr = db.TransactionManager.StartTransaction())
  114.             {
  115.                 var ent1 = tr.GetObject(ge.ObjectId, OpenMode.ForRead) as Entity;
  116.                 string result = ent(ent1);
  117.                 CadApp.ShowAlertDialog($"value switch {result}"); //ok
  118.            
  119.           // test nullable
  120.             List[i] numbers = null;
  121.             int? i = null;
  122.             numbers ??= new List[i]();
  123.             numbers.Add(i ??= 17);
  124.             numbers.Add(i ??= 20);
  125.                 // test nullable in autocad
  126.                 var cur = ent1 as Curve;
  127.                 Point3d? pt = cur?.StartPoint ?? (cur as Circle)?.Center;
  128.                 CadApp.ShowAlertDialog($"value {cur.GetType().Name} {pt}");
  129.             }
  130.             // tes bool function is and or
  131.             bool IsLetter(char c) => c is >= 'a' and = 'A' and  CadApp.ShowAlertDialog("testing dobule click"); //ok
  132.          [b]   var value = new[] { 10, 11, 12, 13 };
  133.             //this not working system index not import what must to do
  134.             int a = value[^1]; // 13
  135.             int b = value[^2]; // 12
  136.             int c = value[2..3];[/b]
  137.         }
  138.     }
  139. }


qsr5ue0x2on.jpg

qsr5ue0x2on.jpg

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

7

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-8-2 10:17:30 | 显示全部楼层
要对 AutoCAD 进行编程,您将无法利用所有最新功能。使用名为“Class (.NET)”的模板开始您的类项目,而不是仅称为“Class”的模板,后者面向.NET Core。查看本文档,了解如何创建新项目并从中制作模板。对于 2019 年,您需要面向特定版本的 .NET Framework。pdf中还有一个图表,您的2019年项目需要针对哪个版本的.NET Framework。
回复

使用道具 举报

14

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2022-8-2 14:54:54 | 显示全部楼层
与模板的关系
是什么 你有没有尝试过,并在net 5.0中工作
我已经在xml
预览中添加
并且netframework是4.8
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2022-8-2 16:06:18 | 显示全部楼层

@daboho.NET Framework 4.8 使用 C# 7.3,因此您的代码将仅限于其功能。
如前所述,AutoCAD需要.NET Framework,而不是.Net Core,也不是.Net 5.0
Records
和静态本地函数
,递归模式
和关系模式
以及合并分配
和索引运算符
和范围运算符
以及C# 7.3之后的其他好东西不可用,这是一个痛苦的问题。
问候,
补充:
这个
https://help.autodesk.com/view/OARX/2023/ENU/?guid=GUID-450FD531-B6F6-4BAE-9A8C-8230AAC48CB4
记录了期望,
尽管可以使用更高版本的VS;即我正在使用VS2022与AutoCAD 2023(.net Framework 4.8)
回复

使用道具 举报

7

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-8-2 17:34:59 | 显示全部楼层
正如kdub所重申的那样,您必须坚持AutoCAD版本的要求,2019年是.NET Framework 4.7。这也显示在提供的链接kdub中。就我提到的pdf而言,它告诉您如何正确创建新项目。它只描述了在最后制作模板。您现在遇到的问题是,您使用错误的模板创建了一个项目,并且无法以4.7框架为目标。若要修复问题,需要使用具有“类 (.NET)”字样的 C# 模板启动一个新项目。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2022-8-3 02:39:03 | 显示全部楼层

自.NETFramework 2.0以来,所有这些功能都在F#中可用。
回复

使用道具 举报

14

主题

28

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2022-8-3 03:33:03 | 显示全部楼层
@gile感谢您的信息
@kdub您的视觉工作室2022和
Autocad 2023最新的语言版本是什么?
回复

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2022-8-3 03:37:55 | 显示全部楼层

问候,
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-21 18:04 , Processed in 0.209900 second(s), 82 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表