当前位置: 首页 > news >正文

多语言笔记系列:Polyglot Notebooks 中使用扩展库

使用 扩展库 Microsoft.DotNet.Interactive.ExtensionLab

Microsoft.DotNet.Interactive.ExtensionLab 是 .NET Interactive 的扩展工具库,主要用于增强交互式编程环境的功能性,提供实验性功能模块和高级数据处理能力。

初始化

#!import "./Base.ipynb"

添加 Nuget 包

添加包成功后,有用法摘要提示!

//添加 Nuget 包
#r "nuget:Microsoft.DotNet.Interactive.ExtensionLab,*-*"
#r "nuget:Microsoft.Data.Analysis"using Microsoft.DotNet.Interactive;
using Microsoft.DotNet.Interactive.Commands;
using Microsoft.DotNet.Interactive.Documents;
using Microsoft.DotNet.Interactive.Utility;using Microsoft.DotNet.Interactive.ExtensionLab;
using Microsoft.Data.Analysis;

使用 #!linqify 魔法命令

#!linqify 魔法命令, 将一个普通的(通常是 C#)代码块转换为 LINQ 查询表达式。这允许你使用更简洁、更声明式的 LINQ 语法来操作数据集合。

注意:没有提供新的Linq功能,只是对原生linq的增强(隐匿返回),方便在Polyglot Notebooks 中使用而已。使用原生还是增强的,随个人喜好。

增强:

  • 隐式返回
    在普通的 C# 代码中,你需要显式地 return LINQ 查询的结果才能看到输出。 使用 #!linqify,查询结果会自动作为单元格的输出返回,无需显式 return 语句。这在交互式 notebook 环境中更方便。

  • 简洁性
    #!linqify 允许你省略一些样板代码。例如,你不需要定义一个单独的变量来存储 LINQ 查询的结果。

  • 交互性
    #!linqify是为了更好地适应交互式 notebook 环境而设计的。它简化了在 notebook 中快速编写、执行和查看 LINQ 查询结果的过程。
    C#原生Linqlinqify魔法命令 使用对比

//公用数据
var students = new List<Student>()
{new Student(){Id = 1, Name = "张三", Age = 8},new Student(){Id = 2, Name = "李四", Age = 95},new Student(){Id = 3, Name = "王五", Age = 60},new Student(){Id = 4, Name = "张三丰", Age = 54},new Student(){Id = 5, Name = "王二小", Age = 21},new Student(){Id = 6, Name = "刘胡兰", Age = 74},new Student(){Id = 7, Name = "列宁", Age = 19},new Student(){Id = 8, Name = "江姐", Age = 52},new Student(){Id = 9, Name = "张海迪", Age = 33},new Student(){Id = 10, Name = "周小呼", Age = 46},
};
//原生Linq
var result = students.Where(s => s.Name.StartsWith("张")).ToList();
result.Display();//或者
var result2 = from s in students where s.Name.StartsWith("张")select s;
result.Display();
#!linqify
students.Where(it => it.Age > 20)

总结:

  • #!linqify 不是为了实现 LINQ 本身。
  • #!linqify 是为了简化 LINQ 在 .NET Interactive Notebooks 中的 交互式使用,通过提供隐式返回和更简洁的语法。
  • 在功能上,使用 #!linqify 和直接编写 C# LINQ 代码是等价的。 你可以选择哪种方式更适合你的编码风格和工作流程。

ExplainCode

这个扩展使用 Mermaid 内核为 csharp 代码生成序列图.以直观的图形方式,展现代码的执行流程。

#!explainvar data = new[] { 1, 2, 3 };
for (var i = 0; i < data.Length; i++)
{Console.WriteLine(i.ToString());
}
#!explain"Hello Explain".Display();

使用 #!inspect 命令,检查代码编译详细信息!

#!inspect 命令,允许您查看C#单元格代码的反编译、IL和JIT Asm. 注意:深色模式下,展示区顶部的Tab[C# | IL JIT | ASM]不明显,但可以正常点击切换,或者换个VSCode主题。

#!inspect
foreach(var x in Enumerable.Range(1,10))
{Console.WriteLine(x);
}

使用 #!record命令来保存您运行的代码的副本

一旦您使用 #!recore 启用转录本记录,每个代码提交(包括重新运行的单元格)都记录在指定的文件中。所使用的JSON格式与.NET Interactive stdio和http API识别的格式相同,可用于通过自动化回放交互式会话。

  1. 使用 record 魔法命令,设定转录文件
#!record --output recore.json
//会在笔记所在的目录生成 recore.json 文件Console.WriteLine("hello,record!");
  1. 读取转录文件
using System.IO;
var fileContent = await File.ReadAllTextAsync("recore.json",System.Text.Encoding.UTF8);
Console.WriteLine(fileContent);

相关文章:

  • Unity 游戏数量单位换算(K/M/B/T)
  • 雅思阅读--易错词汇60个
  • 38.前端代码拆分
  • 软考-软件设计师中级备考 13、刷题 数据结构
  • aws平台windows虚拟机扩容
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 8 |产品化与运维:批量标定、误差监控、OTA 升级与安全防护
  • C语言编程--递归程序--求数组的最大元素值
  • Java后端开发day42--IO流(二)--字符集字符流
  • 2025年渗透测试面试题总结-某战队红队实习面经(附回答)(题目+回答)
  • Nmap 工具的详细使用教程
  • 《Python星球日记》第34天:Web 安全基础
  • 前端流行框架Vue3教程:13. 组件传递数据_Props
  • 今年我国已发生三级以上地震318次
  • 在 Win11 下安装 Wireshark 的详细步骤
  • 深入浅出iOS性能优化:打造极致用户体验的实战指南
  • 餐饮加盟店如何通过日事清全流程闭环管理实现进度同步与效率升级?
  • Java学习手册:Base64 编码概念和应用场景
  • python校园二手交易管理系统-闲置物品交易系统
  • python setup.py install --user和pip install -e .的区别
  • C++ - 仿 RabbitMQ 实现消息队列(1)(环境搭建)
  • 视频丨习近平主席出席俄方在机场举行的迎宾仪式
  • 世界人形机器人运动会将在北京“双奥场馆”举行
  • 印度导弹凌晨打击巴基斯坦多座设施,巴总理:正对战争行为作有力回应
  • 有人悬赏十万寻找“全国仅剩1只”的斑鳖,发帖者回应并证实
  • 江西浮梁县县长张汉坤被查,此前已有4个月无公开活动
  • 李公明 | 一周画记:生活就是抵抗