代码 > csharp用后感

2025-04-25

怎么说呢

csharp这个语言,用起来,的确有优点,有缺点。

真的让我感觉用起来很舒服的,其实只有两个点

第一个是partial关键字,可以把一个类拆成很多个文件来写,这个的确我会滥用。

另一个是字段和属性的无缝转换,字段转属性直接写get和set就好,不需要调整其他地方调用的代码。

至于不爽的地方,就是全局OOP模式了。

我写个单例都不能写在全局变量里,必须写一个静态方法。

蛋疼的不行。

代码 > 发现现在做GUI程序的思路基本已经定型了

2025-04-16

不管做APP还是PC端基本一样。

首先是View+ViewModel搞定显示(前端)

然后当中插入一层引擎,串接起负责提供数据给VM,然后通过Event和嵌入的UI Interface和前端交互,引擎大概率引入个单例,从引擎层分为可交互和不可交互两层。

这样可以做到UI无关化,方便测试,方便GUI转API/CLI,彻底分层

接着是Service层,为处理Model数据的代码提供封装和帮助。

然后是Model层,实际的数据/业务的处理。

感觉还是Frontend+API那套底子。

代码 > 解决csharp xml序列化的hexadecimal value 0x00, is an invalid character问题

2025-04-11

最近在做xml序列化,发现这个问题。

一开始怀疑是源文件问题或者对象失效问题,拿着原文件不停删除行对比,发现具有随机性。

搞了几小时。

起床后灵机一动,是不是真有无效字符,立刻寻找\0字符串。

发现固定在原始数据解析的最后一个元素上。

然后再一查

是读文件的问题

之前用的

            var body = new byte[fileStream.Length];

            fileStream.Read(body, 0, (int)fileStream.Length);

不行

需要使用

ReadExactly

或者

        var body=new StreamReader(fileStream,Encoding.UTF8).ReadToEnd();

的形式。

 

这命名,绝对属于踩到屎山了。

 

网络 > csharp AOT中的XML序列化

2025-04-02

玩具项目引入序列化后,开始体会到CSharp的AOT的蛋疼了。所以也明白CSharp之父做的TSChekcer为啥要用golang不用csharp了。

两门语言对待AOT的优先级上的确不同,CSharp的AOT只是能用,绝对不是优势。

实现,CSharp开启AOT后,反射的功能就开始受限,这对于序列化的影响很大,解决方案是必须显示的指定可能用到的类。

第一个会出现的错误是,报找不到空参数构造函数。

 ---> System.InvalidOperationException: HellMapManager.Models.Map cannot be serialized because it does not have a parameterless constructor.

本质是因为没有指定可能使用的类型(以及子类中可能没指定)。

需要引入

using System.Diagnostics.CodeAnalysis;

然后在类定义中显示的指明

public partial class Map

{

    [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(Map))]

    [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(MapInfo))]

    [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(Alias))]

    [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(Room))]

    [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(Exit))]

    [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(Route))]

    [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(Variable))]

    [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(Landmark))]

然后可能遇到的问题是提示

 ---> System.InvalidOperationException: You must implement a default accessor on System.Collections.Generic.List`1[[HellMapManager.Models.Room, HellMapManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] because it inherits from ICollection.

这是需要在使用XML元素的地方显式指定类型

    [XmlArray(ElementName = "Rooms")]

    [XmlArrayItem(typeof(Room))]

    public List<Room> Rooms { get; set; } = [];

继续写,继续踩坑。

 

代码 > 上手avaloniaui初体验

2025-03-28

在不需要行动力的地方,我行动力总是高的可怕。

找了个需求出来,开始做avaloniaui项目。

怎么说呢,对于vscode的支持一般,和vscode下的flutter体验完全不能比。

csharp本身语法糖有点多,少用点糖就行,Dart也算照着csharp一顿猛抄,所以上首速度还挺快。

axaml个是,也就是学xaml,用xml布局做画面的,和flutter的用代码写组件的体验完全不能比,总觉得丹疼的紧,也没有Vue那么丰富的模板语法。

AOT的话本身体验还行。裁减或打包出来的文件也不多,和flutter桌面版那一家老小一起出游的感觉不同。

继续写写,再体会体会。

代码 > 粗读了一遍C#图解教程

2025-01-24

既然决定要搞C#,那么在节前花了点时间找了个教程粗读了遍。

跳过了短期肯定不会去用的反射,粗看了泛型,其他的仔细过了编。

怎么说呢,csharp到底是这么多年的老语言了,语法层面,不说和C类语言的共通性,真的优点其实也被别的语言抄的差不多了。至少我在脑子里不停的在想:这个Flutter(Dart)抄过了,这个Flutter(Dart)也抄过了。

至于剩下的,没抄过的,至少在我这个一向推行使用多种编程语言的人来看,是在是只适合特殊场景,不值得抄。

对,我说的就是看到很多人吹的委托/事件和Linq。

委托和事件,在某些业务里的确重要,但作为一个通用语言来看的话,这么高优先级优点没必要。

至于Linq,看着那和SQL类似的语句,我只能说,恩,真牛逼,可我真用不上……

读完了,再招点资料和说明,准备开始写了。

代码 > 2025技术栈整理

2025-01-09

整理下自己手头的技术栈

1.golang

这个没的说,的确好用。

可以取代php/python/各种脚本

基本是个 可编译 强类型 基础库强大 的脚本语言。

特别时map和slice,太脚本化了。

能取代大部份使用脚本语言的场景

2.javascript

这个没得说,浏览器里大量使用,各个语言也有成熟的vm可以使用。至于TS,感觉不太适合我用的场景,绝大部分情况下,脚本语言对我只是胶水或者可配置逻辑,实际复杂应用还是走go

3.vue2

等到vue2什么时候停止更新了,再找新的前端框架吧。别的前端框架,哪怕vue3,都太重了,脱离了我对前端的需求

4.flutter/dart

对于一个熟悉前端,不经常写app的人来说,flutter太好用了。dart基本就时一个js,大部份场景下也有很多现成的flutter插件,各种云厂商的支持sdk也很多。随便捏一捏就能弄个app上架了,比较适合我的需求场景。android/ios原生开发实在离我太远,没必要

5.avaloniaui/c sharp

怎么说呢,flutter的确很好用,但再有些场合,太移动端为主,未毕合适。而且c sharp背后有微软在,各个领域未必时第一,但前三的解决方案总有。而且要说实话,golang太脚本化,很多场景c sharp可能会更好用一点。现在dotnet的linux支持看起来也不错,算是今年的研究反向了。20年前最火的时候没学,20年后再去学,也满有意思的。

 

其他的能看懂就行的语言

php:实在用途狭窄了

python:大部份场景不如用golang,能改改别人的python脚本就行了

lua:这个,实在,太不好用

java:能看懂就行,实在不想学

c:万物离不开C,总有可能要做ffi的

代码 > 试了下avaloniaui

2025-01-08

今天发现avaloniaui支持vscode了。

再本地跑了下,在linux应该说能用,但开发体验和vscode的flutter天差地别,只能说能用罢了。

考虑今年空下的时间搞搞看.net

不求多熟悉,能谢谢最基本的工具就行。

背景有微软这个大山在,各种生态还是不愁的。

至于投入太多精力么,也不至于,毕竟普通人还是跟不上微软的思路的。

Linux > 装了个linux版的微信

2024-11-08

虽然PC端的微信对我不是刚需,但是还是冲一下数字吧。

毕竟改善linux环境,总要这样一步一步起来的。

代码 > 被向日葵折腾的不行

2024-09-18

我有个专门放国产软件的虚拟机,向日葵就是里面的一员大将。

前两天连线必须升级,升级玩重启后,好家伙,鼠标点击失效了。

推测是向日葵默认开启被控,接管鼠标操作造成的。

没办法,不停的进安全模式(msconfig关启动和服务)切换,还是不行。

更搞笑的是,鼠标失效后,向日葵还无法反安装。因为反安装界面那两个按钮是画上去的,tab切换不到。

大写的服。

先试试能不能用企业版的监控端吧。

不行就用了就删。

给国产软件虚拟机运行是最正确的选择。