coreFx 源码阅读

1 Collections1.1 List

List<T> 是数组的封装,能够自动完成数组大小的扩容,默认大小为 4,每次扩容数组大小翻倍。

public class List<T>

{

private const int DefaultCapacity = 4;

private T[] _items;

private int _size;

private int _version;

// elide

private void EnsureCapacity(int min)

{

if(_item.Length < min)

{

int newCapacit......

DotNet 高效代码

1 工具

工欲善其事,必先利其器

好的工具有助于我们写高效的 C# 代码,dnSpy 和 BenchmarkDotNet 就是不错的选择。

1.1 dnSpy

众所周知,C# 代码都会编译成 IL (Intermediate Language) 代码,然后被运行时 (Runtime) 执行,目前使用的运行时主要有 .Net Framework, CoreCLR 和 Mono。通过查看 IL 可以知道 C# 代码在编译器作用下会生成怎样的代码,使用 dnSpy 可以将生成的 dll 或者 exe 文件查看成相应的 IL 代码。

using System;

namespace......

使用 GitHub Action 部署 NuGet 包

1 GitHub Action

GitHub 推出 Action 服务已有一阵子,主要目的是取代第三方测试、集成和部署等相关服务,除此之外还有更多有趣的功能,而且与 GitHub 的相关功能紧密结合。现在在每个 Repo 页面中都会看到如下的界面

选择进入可以查看当前 Repo 中包含的 Action 状况。

1.1 GitHub Action 核心概念

工作流(Workflow):仓库中包含的配置自动化运行的过程,通常由多个任务(Job) 组成。它们通常被定时或者被事件触发。

任务(Job):是由一些列步骤(Step)组成的任务,每个任务都是运行在不同的虚拟环境中......

Digest in Effective C#

1 Use Properties Instead of Accessible Data Members

Property is first-class citizen in the C# lanauge. You can verify value to set data member.

public class Person

{

private string name;

public string Name

{

get {return name;}

set

{

if(string.IsNullOrEmpty(value))

throw new ArgumentException(&qu......

How to Test File System

1 Background

Imaging you are writing the application or library on manipulating file on local machine, How will you test your code? Supposing you use C# programming language, you probable type down those codes.

private void DumpSomething(object obj, string filePath)

{

using(StreamWriter writer = ......