MENTAL MODEL / 心智模型
先建立正确的程序直觉
托管内存由 GC 回收,但 IDisposable 资源需要确定性释放;Task 表示异步操作,async void 只适用于事件处理器。
Mathematics · Computational Science · Engineering · Personal Knowledge Systems
切换会载入对应网站形态,并更换导航、首页结构、内容密度、页面网格与阅读路径;当前路径及其他查询参数会保留。
预览卡展示真实构图语言;切换后会同步改变布局密度、卡片几何、按钮、边框、HUD、背景纹样与动效节奏。
0% 会停止装饰动画并隐藏粒子;系统开启“减少动态效果”时始终优先静态显示。
0% 会移除上层面板遮罩,100% 为完全不透明;文字和控件始终保持清晰。
系统已启用减少透明效果:背景模糊会关闭,但仍采用你设置的面板不透明度。
LANG-08 · PROGRAMMING WORKBENCH
用现代类型、async/await 与 .NET 工具链构建桌面、Web 和服务应用。
围绕记录、LINQ、依赖注入、dotnet CLI、NuGet、xUnit 与异步诊断构建可维护 C# 工程。
MENTAL MODEL / 心智模型
托管内存由 GC 回收,但 IDisposable 资源需要确定性释放;Task 表示异步操作,async void 只适用于事件处理器。
CODE REPOSITORY / 代码仓库锚点
dotnet-project/
├─ MemoryTools.sln
├─ src/MemoryTools/MemoryTools.csproj
├─ src/MemoryTools/Program.cs
├─ src/MemoryTools/TaskService.cs
└─ tests/MemoryTools.Tests/TaskServiceTests.csQUICK START / 第一条命令
dotnet new console -n MemoryTools && dotnet run --project MemoryToolsLEARNING ROUTE / 学习路径
每个节点都包含可复制示例、判断原则与常见陷阱。
用不可变记录表达值,用 LINQ 表达查询,用 Task 表达异步结果。
public sealed record TaskItem(string Id, string Title, TaskState State);
var label = item.State switch {
TaskState.Done => "完成",
TaskState.Todo => "待办",
_ => "未知"
};switch expression 配合穷尽分支表达有限状态。
public async Task<string> LoadAsync(Uri uri, CancellationToken ct)
{
using var response = await http.GetAsync(uri, ct);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync(ct);
}库方法接收 CancellationToken 并传给下游;HttpClient 通常复用而非每次新建。
解决方案组织多个项目,业务核心避免依赖具体 UI/数据库。
dotnet new sln -n MemoryTools
dotnet new classlib -n MemoryTools.Core -o src/MemoryTools.Core
dotnet new xunit -n MemoryTools.Tests -o tests/MemoryTools.Tests
dotnet sln add src/MemoryTools.Core tests/MemoryTools.Tests测试项目再通过 dotnet add reference 引用核心项目。
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>示例采用当前 LTS;实际目标框架仍要按部署环境与支持周期选择。
restore、build、test、publish 组成统一 SDK 工作流。
dotnet restore --locked-mode
dotnet build --no-restore
dotnet test --no-build
dotnet publish src/MemoryTools -c Releaselocked-mode 需要 packages.lock.json;否则先根据团队策略启用锁文件。
dotnet watch --project src/MemoryTools run适合开发热重载;生产使用 publish 后产物和固定启动参数。
明确包源、锁定版本,并把跨项目版本集中治理。
dotnet add src/MemoryTools package Microsoft.Extensions.Http
dotnet list package --outdated
dotnet list package --vulnerable升级后阅读变更并运行完整测试;私有源凭据不要写入仓库。
<Project>
<PropertyGroup><ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally></PropertyGroup>
<ItemGroup><PackageVersion Include="xunit" Version="2.9.3" /></ItemGroup>
</Project>放在 Directory.Packages.props;版本仅作结构示例,应跟随当前兼容版本。
测试可观察行为,用结构化日志与 dotnet 工具定位运行问题。
[Theory]
[InlineData("2", 2)]
[InlineData(" 5 ", 5)]
public void ParsesCount(string raw, int expected)
{
Assert.Equal(expected, CountParser.Parse(raw));
}边界和错误可分别使用 Theory 数据与 Assert.Throws。
dotnet test --logger "console;verbosity=detailed" --collect:"XPlat Code Coverage"覆盖率用于发现未执行路径,不代表测试质量。
开启 nullable,完整 await Task,并从最内层异常追踪注册与配置。
读取异常中的 service type → 检查注册生命周期与构造函数 → 避免 singleton 捕获 scoped 服务 → 为组合根写启动测试。不要在业务代码里用 ServiceLocator 绕过缺失注册。
全程 await Task;避免 .Result/.Wait() 阻塞;async void 仅事件处理;为 I/O 传递取消和超时。在库代码和应用代码中保持异步调用链完整。
DTO 输入先验证并授权,再映射到领域对象;确定性释放 IDisposable。
await using var stream = File.OpenRead(path);
var result = await ParseAsync(stream, cancellationToken);await using 用于 IAsyncDisposable;GC 不保证及时关闭外部资源。
EF/LINQ 参数化并避免拼 SQL;每个资源操作都做授权;Data Protection 管理敏感令牌;限制请求/上传;生产不回显详细异常。模型绑定成功只说明格式可解析,不说明调用者有权限或值符合业务规则。
尝试更短的关键词,或者清空分类后重新搜索。
PRIVATE CODE VAULT / 私人代码仓库
把 C# 的练习、工程片段、算法伪代码、验证说明与历史版本保存在登录后的私人空间。
游客只看到这个说明,不会收到、缓存或渲染任何私人源码。
REFERENCE SOURCES / 官方与高质量资料
先在本站找回路径,再进入原始文档确认版本、平台和完整前置条件。
DELIVERY LOOP / 练习闭环