Skip to content

Latest commit

 

History

History
169 lines (119 loc) · 6.6 KB

episode-028.md

File metadata and controls

169 lines (119 loc) · 6.6 KB

.NET 每周分享第 28 期

卷首语

ChatGPT 在 .NET 上的表现

image

ChatGpt 是当前 IT 界的当红炸子鸡,几乎所有人都在讨论它。这是 OpenAI 公司基于 GPT 神经网络模型推出的聊天机器人,它不仅仅可以回答问题,还可以帮助我们编写代码。在这个视频中,展示了如果让 ChatGPT 帮助我们编写按照要求的代码。

  • 首先要求编写一个方法,接受一个 guid 字符串,然后将它转换成 Base64 的形式并且返回。
public string GetBase64FromGuid(string guidString)
{
    Guid guid = Guid.Parse(guidString);
    byte[] bytes = guid.ToByteArray();
    string base64 = Convert.ToBase64String(bytes);
    return base64;
}
  • 需要处理不合法的输入
public string GetBase64FromGuid(string guidString)
{
    if (!Guid.TryParse(guidString, out guid))
    {
        // Return an empty string if the input is not a valid GUID
        return "";
    }
    byte[] bytes = guid.ToByteArray();
    string base64 = Convert.ToBase64String(bytes);
    return base64;
}
  • 优化代码,避免推内存分配
public string GetBase64FromGuid(string guidString)
{
    if (!Guid.TryParse(guidString, out guid))
    {
        // Return an empty string if the input is not a valid GUID
        return "";
    }
    Span<byte> bytes = stackalloc byte[16];
    guid.TryWriteBytes(bytes);
    string base64 = Convert.ToBase64String(bytes);
    return base64;
}

ChatGPT 完全超出了人们的预期,尤其是在编程这一领域。但是:

人们总是高估技术的短期效益,而忽视的技术的长期效益

行业资讯

1、.NET Interactive Notebook 改名

image

微软改名部再次发力,将直接的 .NET Interactive Notebook 更名为 Polyglot Notebook。不过这样做也是合理的,因为现在这个 Kernal 不单单只支持 .NET 语言,还支持很多其他语言:

  • C#
  • F#
  • PowerShell
  • JavaScript
  • SQL
  • KQL (Kusto Query Language)
  • HTML*
  • Mermaid*

2、官方文档中事否推荐收费的开源库?

image

ImageSharp 是 .NET 社区中广泛使用的 2D 图像处理库,但是最近该库的作者将改为商业库。所以在 .NET 官方文档中,将该库被移除,该库的作者最近在 Twitter 上抱怨了这件事。你怎么看这件事呢?

3、Fluent UI 支持 Blazor 2.0

image

Fluent UI 和 Blazor 都是微软推出的前端 UI 框架,最近 2.0 版本已经发布。

文章推荐

1、.NET 7 在网络上的提升

.NET 7 在网络处理上有很大的提升,主要有

  • HTTP 协议
    • 提高链接错误处理能力
    • HttpHeader 线程安全
    • 删除 HTTP/2 和 HTTP/3 协议错误
    • HTTP/3 支持
  • QUIC 协议
    • 开放更多的 API 接口
    • 提供 QuicStream 类型
  • 安全
    • Negotiate API
    • Certificates 校验选项
    • TLS 协议

2、Raw string Literals 最大支持引号数量

image

C# 11 推出了很强大的 Raw String Literals, 通过至少三个引号来表示一个字面字符串,那么最大可以有多少个引号呢?这篇文章作者尝试编写出一个很大的代码文件,其中包含了很多的引号的字符串。

3、NET AOT 对于 Serverless 服务痛点的解决

image

.NET 7 正式推出了 AOT, 它可以将 C# 代码编译成目标机器的机器码,这样在运行的过程中就不再需要转换,大大提高了的运行效率。对于 Serverless 服务,通常是事件驱动,那么每次在加载的时候,都需要进行机器码转换,而 .NET AOT 就解决了这一痛点。

4、Visual Studio 愿望清单

image

圣诞节要到了,这篇文章的作者列出了一些列对于 Visual StudioNuget 的愿望清单,希望 .NET 生态能够像 JavaScript 生态一样开放。

开源项目

1、TodoApi

image

这是个 .NET 示例的仓库,通过 ToDo 这样简单的应用,展示很多 .NET 最新的技术,主要有

  • Blazor WebAssembly
  • Minimal APIs
  • EF + SQLite
  • OpenAPI
  • ASP.NET Core Identity
  • Cookie Authentication
  • JWT Authentction
  • YARP's Proxy
  • Rate Limiting
  • Integration Tests

2、SmartEnum

SmartEnum 库是 John Skeet 关于 C# Enum 类型的增强提议。 它主要解决 C# 中枚举类型只是简单的继承 Int 类型,因为很多时候,我们需要将枚举类型同其他数据放在一起。在 C# 中只能通过 if-else 或者 switch 语句完成。SmartEnum 可以实现类似 Java 这样的语法。

public sealed class Subscription : SmartEnum<Subscription, double>
{
    public static readonly Subscription Standard = new Subscription("Standard", 1.0);

    public static readonly Subscription Prime = new Subscription("Prime", 0.75);

    public static readonly Subscription VIP = new Subscription("VIP", 0.5);

    private Subscription(string name, double discount) : base(name, discount) { }


    public double GetPrice(double price)
    {
        return price * this.Value;
    }
}

// program.cs
Console.WriteLine($"{Subscription.VIP}'s price is {Subscription.VIP.GetPrice(1000)}");