C# 中的 ref 已经被放开,或许你已经不认识了
一:背景
1. 讲故事
最近在翻 netcore 源码看,发现框架中有不少的代码都被 ref 给修饰了,我去,这还是我认识的 ref 吗?就拿 Span 来说,代码如下:
public readonly ref struct Span<T>
{
public ref T GetPinnableReference()
{
ref T result = ref Unsafe.AsRef<T>(null);
...
一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试
一:背景
1. 讲故事
每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻所遇:
我去,本地环境代码跑的哧溜,上了测试环境出问题
我去, 第三方提供的 dll 跑出 bug 了
二:两个大坑的解决方案
1. 本地环境没问题,上了测试出问题
相信很多朋友 ...
C# 中的 in 参数和性能分析
in 修饰符也是从 C# 7.2 开始引入的,它与我们上一篇中讨论的 《C# 中的只读结构体(readonly struct)》[1] 是紧密相关的。
in 修饰符
in 修饰符通过引用传递参数。 它让形参成为实参的别名,即对形参执行的任何操作都是对实参执行的。 它类似于 ref 或 out 关键字,不同之处在于 in 参数无法通过调用的方法进行修改。
re ...
C#-表达式树
目录
表达式树
构建表达式树
使用Expression来进行不同对象的相同名字的属性映射
表达式树构建SQL删选
修改表达式树
构建模拟EF的表达式树解析
连接表达式树
1、表达式树
表达式树,在C#中是Expression来定义的,它是一种语法树,或者说是一种数据结构。其主要用于存储需要计算、运算的一种结构,它只提供存储 ...
[C#.NET 拾遗补漏]10:理解 volatile 关键字
要理解 C# 中的 volatile 关键字,就要先知道编译器背后的一个基本优化原理。比如对于下面这段代码:
public class Example
{
public int x;
public void DoWork()
{
x = 5;
var y = x + 10;
Debug.WriteLine("x = " +x + ", y = " +y);
}
}
在 Release 模式下,编译器读取 x = 5 ...
用 Span 对 C# 进程中三大内存区域进行统一访问 ,太厉害了!
一:背景
1. 讲故事
前段时间写了几篇 C# 漫文,评论留言中有很多朋友多次提到 Span,周末抽空看了下,确实是一个非常🐂👃的新结构,让我想到了当年的WCF,它统一了.NET下各种零散的分布式技术,包括:.NET Remoteing,WebService,NamedPipe,MSMQ,而这里的 Span 统一了 C# 进程中的三大块内存访问,包括:栈内存, 托管 ...
C# 8: 默认接口方法
翻译自 John Demetriou 2018年8月4日 的文章 《C# 8: Default Interface Methods》[1],补充了一些内容
C# 8 之前
今天我们来聊一聊默认接口方法。听起来真的很奇怪,不是吗?接口仅用于定义契约。接口的实现类会拥有一组公共方法,不过实现类被赋予了以其自己的方式实现每个方法的自由。目前为止,如果我们还需要为这些 ...
C# 泛型约束 new() 你必须要知道的事
C# 泛型约束 new() 你必须要知道的事
注意:本文不会讲泛型如何使用,关于泛型的概念和泛型约束的使用请移步谷歌。
本文要讲的是关于泛型约束无参构造函数 new 的一些底层细节和注意事项。写这篇文章的原因也是因为看到 github 上,以及其他地方看到的代码都是那么写的,而我一查相关的资料,发现鲜有人提到这方面的细节, ...
C# 中 System.Range 结构体
翻译自 John Demetriou 2020年4月6日 的文章 《C# 8 Is Introducing Ranges》,补充了一些内容
我们之前讨论过的 C# 中的一个特性 System.Index 结构体[1],与另一特性 System.Range 结构体 是携手并进的。
在 C# 8.0 之前,没有访问集合中任意部分的范围或切片的语法。开发人员通常不得不执行一些自定义的切片操作,或者 ...
C# 中的 is 真的是越来越强大,越来越语义化
一:背景
1. 讲故事
最近发现 C#7 之后的 is 是越来越看不懂了,乍一看花里胡哨的,不过当我静下心来仔细研读,发现这 is 是越来越短小精悍,而且还特别语义化,那怎是一个爽字了得😄,这一篇就和大家简单聊一聊。
二:C#7 之前的 is 如何使用
1. 类型兼容性检测
相信学过 C# 的朋友都会知道 is 是干嘛的,而且还经常和 as ...
新版 C# 高效率编程指南
前言
C# 从 7 版本开始一直到如今的 9 版本,加入了非常多的特性,其中不乏改善性能、增加程序健壮性和代码简洁性、可读性的改进,这里我整理一些使用新版 C# 的时候个人推荐的写法,可能不适用于所有的人,但是还是希望对你们有所帮助。
注意:本指南适用于 .NET 5 或以上版本。
使用 ref struct 做到 0 GC
C# 7 开始引入 ...
如何使用 C# 中的 ValueTask
在 C# 中利用 ValueTask 避免从异步方法返回 Task 对象时分配
翻译自 Joydip Kanjilal 2020年7月6日 的文章 《How to use ValueTask in C#》
异步编程已经使用了相当长一段时间了。近年来,随着 async 和 await 关键字的引入,它变得更加强大。您可以利用异步编程来提高应用程序的响应能力和吞吐量。
C# 中异步方法的推荐 ...
C# 中居然也有切片语法糖,太厉害了
一:背景
1. 讲故事
昨天在 github 上准备找找 C# 9 又有哪些新语法糖可以试用,不觉在一个文档上看到一个很奇怪的写法: foreach (var item in myArray[0..5]) 哈哈,熟悉又陌生,玩过python的朋友对这个 [0..5] 太熟悉不过了,居然在 C# 中也遇到了,开心哈,看了下是 C# 8 的新语法,讽刺讽刺,8 都没玩熟就搞 9 了,我 ...
C# 9.0 新特性预览 - 顶级语句
C# 9.0 新特性预览 - 顶级语句
前言
随着 .NET 5 发布日期的日益临近,其对应的 C# 新版本已确定为 C# 9.0,其中新增加的特性(或语法糖)也已基本锁定,本系列文章将向大家展示它们。
目录
[C# 9.0 新特性预览 - 类型推导的 new][C# 9.0 新特性预览 - 空参数校验][C# 9.0 新特性预览 - 顶级语句][C# 9.0 新特性预览 - Re ...
你没有看错,爬网页数据,C# 也可以像 Jquery 那样
一:背景
1. 讲故事
前段时间搞了一个地方性民生资讯号,资讯嘛,都是我抄你的,你抄官媒的,小市民都喜欢奇闻异事,所以就存在一个需求,如何去定向抓取奇闻异事的地方号上的新闻,其实做起来很简单,用逻辑回归即可,这篇主要讨论如何去抓取,在 C# 中大家都知道抓取通用的库是 HtmlAgilityPack,但是这个库主流的做法是 ...
C# 面试问答
1.什么是 COM?
COM 代表组件对象模型。
COM 是微软技术之一。使用这项技术,我们可以开发窗口应用程序以及Web应用程序。
在较早的 COM 中,VB 是用于实现 windows 应用程序的编程语言,ASP 用于实现 Web 应用程序。
2.COM有什么缺点?
COM 的主要缺点是
不完整的面向对象的编程意味着它不支持 OOP 的所有功能。
依赖于平 ...
C# Mapster 对象映射器(C#对象映射器)
前言
谈到对象映射器,AutoMapper 知名度是非常的高,但很少有人知道 Mapster。而为什么选择 Mapster 呢?
理由一:性能优于 AutoMapper ,相关测试位于https://github.com/MapsterMapper/Mapster上查看。
理由二:多学习一项技能
网上查了一下,关于 Mapster 的资料非常少,所以在这里我们详细写下它的用法,以帮助更多的 ...
C#开发串口通信实例及串口基础
一、串口通信简介
串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。
串口通信(Serial Communications)的概 ...
理解C#中的ExecutionContext vs SynchronizationContext
原文:https://devblogs.microsoft.com/pfxteam/executioncontext-vs-synchronizationcontext/
作者:Stephen
翻译:xiaoxiaotank
不来深入了解一下?
为了更好的理解本文内容,强烈建议先看一下理解C#中的ConfigureAwait。
虽然原文发布于2012年,但是内容放到今日仍不过时。好,开始吧!
最近,有人问了我几个关于Execu ...
C#类库推荐 拼多多.Net SDK,开源免费!
背景介绍
近两年拼多多的发展非常迅速,即便口碑一般,也没有网页端,奈何我们已经全面小康,6亿月收入1000以下,9亿月收入2000以下,所以因为价格原因使用拼多多的用户也越来越多了。同样的,拼多多也开放了部分API接口,提供给开发者使用,开放平台也是一如既往的拼多多,没法跟淘宝、京东等相比,至今没有测试环境,官方 ...