C#
文章平均质量分 58
欲东欲
对于计算机技术,个人追求深挖设计,架构,算法,原理。不要过于浮躁,追求速成。不要被网络或者各种观点带偏。
展开
-
使用.NET Jieba.NET 的 PosSegmenter 实现中文分词匹配
中文分词是将连续的中文文本切分成有意义的词语的过程。例如,对于句子"我喜欢使用Jieba分词器",分词结果应该是["我", "喜欢", "使用", "Jieba", "分词器"]。中文分词在自然语言处理、文本挖掘等领域都具有重要的应用。Jieba.NET是一个基于Python开源项目jieba的.NET版本。它提供了高效且准确的中文分词和词性标注功能。Jieba.NET支持基于前缀词典和隐马尔可夫模型的分词算法,能够处理各种复杂的中文文本。原创 2023-08-23 16:15:11 · 261 阅读 · 0 评论 -
【C#/.NET】Dapper使用QueryMultipleAsync执行多条SQL
通过使用Dapper的QueryMultipleAsync一次性查询多个结果,减少了与数据库服务器的请求次数。减少了代码量。原创 2023-06-09 16:10:24 · 746 阅读 · 0 评论 -
【C#/.NET】使用ASP.NET Core对象池
T Get()负责获取复用对象。Return负责将复用的对象释放回对象池中。如果不调用Return,表示该对象在对象池被移除。原创 2023-05-28 15:27:04 · 119 阅读 · 0 评论 -
【C#代码整洁之道】读后总结
GPT回答:DRY是"Don't Repeat Yourself"的缩写,意为“不重复自己”。这个原则是指在代码中避免出现重复的、冗余的代码,而是尽可能地使用模块、函数和其他工具来进行抽象和复用。可维护性更好:由于代码的可重用性更高,因此需要修改的代码也更少,减少了维护成本。可读性更好:因为代码更少且更简单,因此容易理解,同时也更易于找到、修改和重构,提高了代码的可读性。可扩展性更好:由于代码更加通用和抽象,因此可以轻松地扩展为其他功能,提高了代码的可扩展性。原创 2023-05-18 11:44:38 · 132 阅读 · 0 评论 -
C++与C#对于有无符号数值运算的区别
得到结果65534,因为short最大值为32767.比较反直觉的是 此处应该发生算数溢出。而由于C#的数值运算,小于int类型的数值统统都会转成int进行运算。原因:int由于与有符号变量u进行加法运算,C++编译器将进行类型转换,i的值变为 2^32 - 42 +1成为一个有符号数值然后与u相加得到结果。此处 直觉认为应该还是12345,结果却为53191。也是由于无符号转换为有符号,进行了反码到原码的转换 得到了53191。C#也依然存在 无符号数转型发生不符合直觉的结果。原创 2023-02-02 16:06:23 · 133 阅读 · 0 评论 -
ASP.NET Core中Get方式QueryString映射的小坑
我以为这样,映射到Dto上依然能使用默认值。不需要传的参数,swagger没有在URL上做拼接,之前没注意这个细节。直到前端给我说他用Name默认值排序没有预期的效果。后端自己写完接口后,我都是用swagger测试的。对于Get方式类似分页,过滤,排序这种字段,我喜欢加上默认值。1.让前端把需要默认值的,URL不要加上。(还是让前端感知到了默认值的事,跟他们自己显式指定区别不大了。要么就是在属性后直接赋值,要么就构造函数赋值这两种。2.我在代码或者Filter在做一层,如果是Null值就赋值成默认值。原创 2022-10-22 13:22:54 · 290 阅读 · 0 评论 -
.NETCore3.1升级.NET6坑点记录
NETCore3.1我Post请求正常情况下返回的是CreatedAtRoute()。到更高版本需要在services.AddControllers中设置c.SuppressAsyncSuffixInActionNames = false;(Action后缀Async)然后改用CreatedAtAction。原创 2022-10-20 15:07:46 · 497 阅读 · 0 评论 -
C#/.NET 关于抛出异常
而File.Open()如果文件不存在或者没有权限读取可以抛异常,因为Open只有在满足上述条件才有意义。.NET也有很多做的好的示例,比如类型转换有int.parse和int.Tryparse两种,一般容易有异常的都有Try开头的版本。创建自己的异常类是为了能用不同的catch捕获不同的状况。大量的用到非托管资源其实非常的坑,没办法像C++那样及时的释放。而需要清晰的异常信息来保证更快的修复程序效率,可以试着创建自己的异常类。Try/finally是保证程序出异常了,依然能释放非托管资源。...原创 2022-08-17 00:00:00 · 1221 阅读 · 0 评论 -
C#/.NET 关于Linq比较好的做法和坑
某些查询操作会把整个集合都处理一遍,数据集过大的话,还是性能成问题,操作会产生新的数据集,内存资源占用大。lambda表达式代码访问了变量,编译器就会针对对象生成方法,实例的或者静态的。在闭包中捕获了变量,引用的对象生命周期会延长,直到最后一个引用该变量的委托变为垃圾之后,对象才标记成垃圾。多重嵌套的循环语句不容易理解意图,特别是对集合不止有循环,还有排序,分组,过滤。处理数据集的代码段,如果有修改状态的,而中途抛出了异常,会导致数据不一致。最好使用Linq这种查询语句,执行结果一样,但是代码容易理解。..原创 2022-08-16 00:00:00 · 450 阅读 · 0 评论 -
C#/.NET 关于泛型比较好的做法 笔记
泛型方法提供的泛型参数只需要与该方法的要求相符就行,而泛型类提供的泛型参数要满足该类定义的每一条约束。如果根据类型参数去创建实例需要保证,实例类型是否实现了IDispose接口,实现了就需要编写相关代码。25.如果不需要把类型参数所表示的对象设为实例字段,那么应该优先考虑创建泛型方法,而不是泛型类。如果在X可以转换成Y的前提下能够把C当成C,叫做该泛型对T协变。如果在Y可以转换成X的前提下能够把C当成C,叫做该泛型对T协变。.NET是2.0支持泛型的,还有很多非泛型的代码需要兼容。...原创 2022-08-15 00:00:00 · 165 阅读 · 0 评论 -
C#/.NET关于资源更好的做法 笔记
C#中定义了析构函数的类会在生命周期结束后,先被放进析构队列,由执行析构队列的线程去执行指令,然后才能释放。析构函数是由CLR进行调用的,如果调用析构函数的时候,通过其他类引用当前类,那么会导致析构函数已经被执行,而引用却从无到有。直接设定的初始值比起构造函数好处是以后增加构造函数,不需要在新构造函数中又加一边初始化,防止出错。在类中频繁使用相同的对象,尽量维护一个私有字段对象实例,而不是每次调用创建局部变量。过多的对象占用内存,而又频繁触发GC,GC又会挂起所有线程,导致程序效率低。...原创 2022-08-14 05:00:00 · 108 阅读 · 0 评论 -
C#精益求精
编译期的常量用const来声明(const可以在方法体内声明,readonly不行),常量是编译器把变量给替换成常量值,如果不同程序集都使用某个其他程序集的常量。这种写法成立,由于有多个string.Format重载,编译器只会确定重载方法是否有合适的,不会检查参数个数与序号数量是否匹配。类型不受限制,可以是随意的class。如果变量是事件处理器,多线程的环境下,有可能其他线程正好取消事件订阅,而执行判断的线程被打断了。2.多播委托,如果有返回值,前面的返回值都被丢弃,最后一个执行委托的返回值被返回。...原创 2022-08-13 19:23:20 · 479 阅读 · 0 评论