![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#基础语法
文章平均质量分 54
code bean
wpf/halcon/算法 技术分享~~~~
展开
-
【C#】 enum 还能这么玩
背景:这是一张雷赛卡的报错信息表,我想将其做成一个枚举,然后供异常系统使用:下面这种写法,非常适合: enum MotionFuncErrCodeEnum { [Description("成功")] ERR_NOERR = 0, [Description("未知错误")] ERR_UNKNOWN =1, [Description("参数错误")] ERR_PARAERR =2,原创 2022-04-24 08:54:53 · 579 阅读 · 0 评论 -
【C#】C#踩坑三角函数之uvw平台
一开始,我以为Math.Cos参数是度数,所以怎么算都不对! 一度怀疑C#的Math库。后面才意识到,这个参数会不会是弧度?结果改成弧度就对了!!!原创 2024-03-22 22:33:22 · 301 阅读 · 0 评论 -
【C#】async和await 续
在文章《async和await》中,我们观察到了一下客观的规律,但是没有讲到本质,而且还遗留了一个问题:这篇文章中,我们继续看看这个问题如何解决!当时问题是,为啥 Task.Factory.StartNew 可以看到异步效果,而Task.Run中却是同步效果。那其实是因为,Task.Factory.StartNew 返回的 t.Wait();它没卡住主线程,而Task.Run的 t.Wait();它卡住了。那为啥,Task.Factory.StartNew没卡住呢?原创 2023-07-28 17:11:49 · 684 阅读 · 3 评论 -
【C#基础】轻松理解AutoResetEvent 和 ManualResetEvent
信号同步的原理就是等待信号,有信号状态直接过,无信号就等。怎么等?通过调用WaitOnce等。Set设置信号为有信号,ReSet设置状态为无信号。AutoResetEvent就是等完之后会自动变成无信号!与之相反是ManualResetEven。Manual翻译过来就是手动。需要显式调用 `Reset` 方法将其重置为无信号状态。还有一个关键的问题是多个一个的区别!我们可以的通过 同一个AutoResetEvent 对象 在不同的线程里调用很多次WaitOnce。这样就会又很多个线程等待同一原创 2023-07-07 10:38:15 · 5066 阅读 · 12 评论 -
【C#】继承和序列化
为啥我需要支持多态类型层次结构的序列化呢?原因是这样的,目前写了一很多工具类,本着遵循 do not copy your self 的原则,我使用了继承。一堆工具集成一个工具类。所以在序列化的时候,我的数据结构中使用的类型是基类,而指向的对象是子类。而在使用System.Text.Json的时候发现,序列化后的内容是父类的类容,而子类的部分并没有序列化。这相当于数据丢失了! 所以我需要“支持多态类型层次结构的序列化”。当更换为Newtonsoft.Json之前,序列化时子类的部分就得以保存成功。原创 2023-05-15 11:39:32 · 1051 阅读 · 0 评论 -
【C#】 捕获异常巨耗时?
一次编程发现程序耗时突然增加,耗时从300ms涨到了2000多ms。通过定位我发现是异常捕获导致的!原创 2023-04-04 16:31:28 · 129 阅读 · 0 评论 -
C# 继承与静态变量 Init-only 和 Readonly
作为一个C# “老司机”,今天也调到一个语法的坑里。子类继承的静态变量,并不属于子类,仍然属于父类。原创 2023-04-03 20:46:30 · 401 阅读 · 0 评论 -
【wpf】[踩坑日记] “组件“XXX”不具有由 URI“XXX“识别的资源”
这是一个和反射相关的奇怪问题:具体报错如下: 报错的地方是:这里是我想通过,prism提供的方式,弹出一个子窗口。这里prism应该也是用到的反射技术。本来这段代码是正常工作的。但是,在此段代码执行之前,我加了一段代码,也对这个界面的DLL进行了反射: 结果, prism就表示,找不到那个界面了。注释掉,这段反射,prism ShowDialog 又可以了。感觉就是我对这个DLL反射之后,影响了prism的反射。于是,我查找资料,发现有个博主和我遇到了类似的情况:Wpf: “组件“XXX”不具有由 URI“原创 2022-12-08 10:33:11 · 619 阅读 · 0 评论 -
【C#】正则表达式总结 看不懂你打我~~
常用的限定符代码/语法说明*重复零次或更多次+重复一次或更多次?重复零次或一次{n}重复n次{n,}重复n次或更多次{n,m}重复n到m次点号本身只能匹配一个字符,但是加上*号之后,就能匹配无数个字符!"重复"他就像一个驱动器,驱动着匹配继续进行!“问号”在正则中,扮演连个角色:1 匹配前面的子表达式零次或一次,2 指明一个非贪婪限定符。(懒惰限定符中介绍)ps(如要匹配?字符,请使用 \?。)原创 2022-11-07 20:51:51 · 816 阅读 · 0 评论 -
【C#】xml解析对比XDocument和XmlDocument
XDocument比XmlDocument好用太多。XmlDocument 位于 using System.Xml; 下XmlDocument位于using System.Xml.Linq;下原创 2022-11-04 14:11:43 · 813 阅读 · 0 评论 -
【C#】async和await
发现这个大神的解释一针见血,深得我心!以最简单的例子,解释了async和await。其实,大多情况下,分开才能体现async和await的价值!查了一个小时的资料:async和await。原创 2022-11-01 09:08:08 · 803 阅读 · 9 评论 -
【踩坑日记】double的精度还是不够啊!-> decimal
这样的话 Round返回的是decimal,这样的话精度够高,就没有出现精度丢失的情况了。原创 2022-09-27 22:43:19 · 861 阅读 · 0 评论 -
【C#】SuperSocket 服务端使用总结
{}其实这里省略了,Session 和 RequestInfo,Session默认的就是AppSession ,RequestInfo默认是的StringRequestInfo。如果想构建一个Server,就必须对于构建Session 和 RequestInfo。要构建一个Session,就必须构建一个RequestInfo。/// 简单的将过来的数据进行格式化{{//消息包头部,大小端转换//正文部分//固定头含义(1:平台数据,2,表示心跳)}//接口必须实现的部分set;}原创 2022-09-15 22:21:18 · 2255 阅读 · 0 评论 -
【C#】 如何通过泛型构建对象+如何后台添加控件
首先我们通过typeof(T)拿到泛型的类型,然后同Activator.CreateInstance构造对象,最后通过强制转换转换成泛型对应的类型。原创 2022-09-14 11:50:39 · 454 阅读 · 0 评论 -
【C#】复杂Json的反序列 + 任意Json获取
其中result这个key对应的内容是可能发生变化的,所以这里可以用到泛型。如何将一个复杂类型的JSON进行反序列化。那就是如何把json拆解成一个个子类的过程。原创 2022-09-13 22:08:54 · 1979 阅读 · 0 评论 -
【C#】RestSharp踩坑日记
RestSharp踩坑日记原创 2022-09-08 14:25:53 · 2648 阅读 · 0 评论 -
写出了一个CPU占用极高的代码后引发的思考
如果你写了一个死循环,且没有任何延时,此时CPU占有率就会飙升。原创 2022-08-04 20:35:00 · 687 阅读 · 0 评论 -
C# 进程如何使用非静态方法
直接给出结论:1 如果在外部初始化,就只能指的静态的方法!2 如果在方法内部初始化就可以指定非静态方法!原创 2022-06-20 16:36:21 · 356 阅读 · 0 评论 -
【C#】 彻底搞明白深拷贝
每一种语言都有深拷贝这个概念,其实本质上都是一样的,这次从C#的角度解释。C# 有值类型和引用类型。值类型,如int之类的不存在浅和深的问题,直接赋值就完了。引用类型,比如我们自定义的类。通过new的方式创建,new返回的其实是个“指针”,或者说是引用,他自己在栈上,但是new分配的空间在堆上。 如果直接对引用赋值的话,相当于是改变“指针”的指向。之前被他管理的堆内存,就被悬空了,最后没人指向它,就会被垃圾回收机制给回收了。比如,我自定义一个类。 public cla原创 2022-04-23 16:55:32 · 1520 阅读 · 0 评论 -
C# (wpf) 线程 Join + Invoke 导致的锁死
背景:当前我们开启一个线程,同时又想在线程里面访问界面的一些元素时,此时会报错,不能跨线程调用。为了解决这个问题,我们通常的解决方法是,使用invoke,将访问界面的部分放到invoke中,如:this.Dispatcher.Invoke(new Action(() =>{ }));那么这样一个含有Invoke的线程,如果你想在主线程,调用join等待该线程结束,那么你将等待一辈子。因为this.Dispatcher.Invoke 是请求主线程同步执行委托方法,但主线程已原创 2022-04-19 21:06:06 · 928 阅读 · 0 评论 -
C# 配置文件的最终解决方案, yaml的序列化,反序列化
首先安装包:该包提供的yaml的序列化,和反序列化功能。新建一个cs文件管理你的配置数据结构如: public class SeriaInfo { // Com 端口 public string port { get; set; } = ""; //波特率 public string baudRate { get; set; } = "无(None)"; //奇偶校验位 publi...原创 2022-04-13 14:00:34 · 2003 阅读 · 0 评论 -
WPF 等宽字体
有时空格的宽度比字母小想在textbox中字母与空格占用的宽度相同,需要设置:FontFamily="Courier New"其实,空格格式化,及不够长度用空格代替。比如:关键使用方法:PadRightint num = 10;string str_speed = String.Format("{0:F3}", speed).PadRight(num);string str_pid = String.Format("{0:F3}", pid).PadRight(num);st..原创 2021-09-23 15:15:16 · 599 阅读 · 0 评论 -
C# partial 的使用技巧
partial 可以实现将一个类的类容分布到不同的cs文件.然后通过文件名,可以达到这种效果~~~~这样感觉还是挺酷的~~~原创 2021-08-24 18:23:22 · 53 阅读 · 0 评论 -
C# Func<> 委托
没有参数: Func<TResult>有参数:Func<T,TResult>T代表传入参数类型,TResult代表返回参数类型,当然可以有多个参数T1、T2、T3…上代码 class FuncTest { string One(int num, string str, float f) { return $"{num},{str},{f}"; } bool Tow()原创 2021-08-16 18:58:28 · 177 阅读 · 0 评论