AI教我学编程之C#入门程序详解与拓展

news/2024/6/26 3:55:58 标签: c#, 开发语言, AI编程, visualstudio, 笔记, 经验分享

与AI肩并肩

  • 前言
  • 一、一个简单的C#程序
    • 补充说明
    • 对话AI
  • 二、标识符
  • 三、关键字
  • 四、Main
  • 五、空白
      • 1. 缩进
      • 2. 代码块的间距
      • 3. 操作符的空格
      • 4. 换行
      • 5. 一致性
  • 六、语句
  • 七、从程序输出文本
      • 主题:从程序中输出文本
        • 1. Write 和 WriteLine 方法
        • 2. 格式字符串
        • 3. 多重标记和值
        • 4. 格式化数字字符串
      • 对给出的程序进行分析
      • 1. Write 和 WriteLine 方法
      • 2. 格式字符串
      • 3. 多重标记和值
      • 4. 格式化数字字符串
  • 八、注释
    • 1. 单行注释
    • 2. 多行注释
    • 3. 文档注释
      • 重要内容
      • 注释总结
    • 补充说明
      • 单行注释
      • 多行注释
    • 纠正
    • 由于chatgpt提供的快捷键适合于vs2019不适于vs2010,所以我重新编辑了要求如下
      • 单行注释
      • 取消单行注释
      • 多行注释
    • 再次修改
      • 多行注释
      • 最后通牒
  • 总结

前言

此前,通过AI辅助学习我们了解了C#关键字,变量的相关知识,这篇文章我们通过C#入门程序来学习其余的C#基础知识,并对此前学习的知识加以概括总结


本文将由ChartGPT辅助生成示例代码,让我们拭目以待

一、一个简单的C#程序

程序员

生成一个简单的C#程序

在这里插入图片描述

当然,请看下面的示例代码,这是一个简单的 C# 程序,它输出 “Hello, World!” 到控制台:

using System;

namespace MyNamespace
{
    class Program
    {
        static void Main()
        {
            // 输出文本到控制台
            Console.WriteLine("Hello, World!");
        }
    }
}

具体解释如下图
在这里插入图片描述

行号描述
1告诉编译器这个程序使用System命名空间里的类型
3声明一个新的命名空间:MyNamespace
新命名空间从第4行的左大括号开始到第12行与之对应的右大括号
在这部分里声明的任何类型都是该命名空间的成员
5声明一个新的类型Program
任何在第6~11行的两个大括号中间声明的成员都是组成这个类的成员
7Main是一个特殊函数,编译器用它作为程序的起始点
9这一行只有一个简单的语句以分号结束
这条语句使用命名空间System中的Console类将消息输出到屏幕窗口
没有第一行的using语句,编译器无法找到类Console

补充说明

C#程序由一个或多个类型声明组成。程序中的类型可以以任何顺序声明。在这段代码中,只声明了 class类型。
命名空间是与某个名称相关联的一组类型声明。这段代码使用了两个命名空间。它创建了一个名称为 MyNamespace 的新命名空间,并在其中声明了其类型(program类)还使用了 Systen命名空间中定义的 Console类。

对话AI

程序员

举出以多个类型声明组成的C#程序,程序中的类型可以以任何顺序声明

在这里插入图片描述

当在 C# 中声明多个类型时,它们可以按照不同的顺序进行声明。以下是一个示例程序,其中包含了三个类型的声明,它们的顺序是不同的:

using System;

// 类型声明顺序:1
class Program
{
    static void Main()
    {
        Console.WriteLine("Hello, C#!");
    }
}

// 类型声明顺序:2
public class Car
{
    public string Model { get; set; }
    public int Year { get; set; }
}

// 类型声明顺序:3
struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

在这里插入图片描述

在这个示例中,有一个名为 Program 的类,包含 Main() 方法作为程序的入口点。然后是一个名为 Car 的公共类和一个名为 Point 的结构体,它们的声明顺序是不同的。
这些类型声明的顺序不会影响编译程序运行。在 C# 中,类型声明的顺序不重要,编译器能够正确地处理这些类型声明,并且在运行时按需加载这些类型。

二、标识符

程序员

在这个程序中,有哪些标识符

在这里插入图片描述

在给出的简单程序中,标识符是用来命名变量方法等的名称。以下是程序中的标识符列表:

标识符释义
MyNamespace命名空间的名称,是一个标识符。
Program类的名称,也是一个标识符。
Main方法的名称,是程序的入口点,也是一个标识符。
argsMain 方法的参数名,是一个标识符。
Console表示 .NET Framework 中的控制台类,也是一个标识符。
WriteLine控制台类 Console 中的方法名,是一个标识符。

由此,我们知道了命名空间,类名,参数名,方法名都可以作为标识符

程序员

C#常用的标识符有哪些?

在这里插入图片描述

在 C# 中,标识符是用于命名变量、类、方法、命名空间等的名称。以下是一些常用的 C# 标识符以及它们的命名约定

标识符种类标识符作用举例
类和结构体组织数据和行为的模板或蓝图MyClass、Person、
customerData
接口定义类必须实现的行为规范IDisposable、IEnumerable
方法和函数执行特定操作或行为的代码块DoSomething()、calculateValue()
变量和字段用于存储数据的名称myVariable、someValue
属性用于访问对象状态并公开相应数据Name、age
命名空间用于组织和管理相关类的容器myNamespace、projectModule
常量在程序中保持不变值的标识符MAX_VALUE、PI
枚举一组命名的常量集合DaysOfWeek、Colors
事件在对象发生特定动作时触发的动作或通知buttonClicked、
dataReceived
参数传递给方法的值parameter、inputValue

要了解更多,请点击C# 标识符命名规则和约定

三、关键字

程序员

在这个程序中,有哪些关键字?

在这里插入图片描述

在给出的程序中,以下是C#中使用的关键字列表

关键字用途
namespace用于声明命名空间,用于组织和区分代码的作用域。
class用于声明一个类,是定义对象的模板或蓝图。
static用于声明静态成员,表示成员属于类而不是类的实例。
void表示方法不返回任何值。
string表示字符串数据类型。
using用于引入命名空间,简化代码中对类型和成员的访问。
Console表示控制台类,用于在控制台上进行输入和输出。
WriteLine控制台类的方法,用于在控制台上输出一行文本。
Main程序的入口点方法,其中程序开始执行。
argsMain方法的参数,用于接收命令行参数。

由于关键字数量较多,若需要了解更多关键字,请访问Microsoft官网

四、Main

程序员

作为C#初学者,需要对main方法有多少了解?

在这里插入图片描述

对于入门学习C#,了解 Main 方法是非常重要的,因为它是C#程序的入口点,程序从这里开始执行。

在C#中,每个应用程序都必须有一个 Main 方法作为程序的入口。这个方法必须是静态的(static),返回类型可以是 voidint。当程序启动时,操作系统加载程序并且开始执行,首先会在 Main 方法中开始执行代码。

Main 方法的基本结构如下:

class Program
{
    static void Main(string[] args)
    {
        // 在这里编写你的代码
    }
}
  • staticMain 方法必须是静态的,这表示它属于类而不是类的实例。
  • voidintMain 方法可以是 void 类型,表示不返回任何值,也可以是 int 类型,表示返回一个整数值作为程序的退出码。
  • Main 方法接受一个字符串数组作为参数 args,这个数组包含命令行传递给程序的参数。

Main 方法中,你可以编写程序的逻辑代码,进行各种操作,例如输入输出、调用方法、定义变量等。从 Main 方法开始,程序会按照你编写的逻辑顺序执行代码。

因此,对 Main 方法的理解对于编写和理解C#程序的结构和执行顺序非常重要。它是C#程序执行的起点,是入门学习C#编程语言的重要一步。

五、空白

程序员

C#新手对C#空白要了解多少?

在这里插入图片描述

对于 C# 的新手来说,了解以下关于空白(空格、制表符、换行符)的基本概念是很重要的:

  1. 空格

    • 在编程中,空格通常用于分隔不同的单词、操作符或语句,使代码更易读。
    • C# 中的空格是被忽略的,不会影响程序的逻辑,但它们有助于提高代码的可读性。
  2. 制表符

    • 制表符通常用于缩进代码块,以显示代码的结构。
    • 缩进是一种良好的编码习惯,有助于代码的可读性和理解。
  3. 换行符

    • 换行符用于结束一行代码,将代码分成多行以提高可读性。
    • 在C#中,分号 ; 通常用于表示语句的结束。因此,每个语句应该在一个新的行上结束。

虽然空白字符对代码的逻辑没有直接影响,但良好的空白使用习惯可以提高代码的可读性和维护性。一些编辑器和集成开发环境(IDE)会自动处理空格、制表符和换行符,但理解它们的作用有助于编写易读且易于维护的代码

初学者应该了解如何使用空白字符来格式化代码,以及如何结合良好的编码实践,使代码易于理解和维护

程序员

初学者该如何使用空白字符格式化代码?

在这里插入图片描述

在C#中,使用空白字符来格式化代码是一种良好的编码习惯,可以增强代码的可读性。初学者可以采用以下几种方法来格式化代码中的空白字符

1. 缩进

缩进是代码结构的重要部分,使代码块更易读。使用空格或制表符来缩进代码块。通常情况下,推荐使用空格作为缩进,例如每个缩进使用 2 到 4 个空格。

void MyMethod()
{
    if (condition)
    {
        // 两个空格的缩进
        statement;
    }
    else
    {
        // 四个空格的缩进
        anotherStatement;
    }
}

2. 代码块的间距

在不同的代码块之间使用空行来增加可读性。例如,在方法之间或逻辑上相关的代码块之间使用空行来分隔。

void Method1()
{
    // 方法体
}

// 空行

void Method2()
{
    // 方法体
}

3. 操作符的空格

在操作符前后添加空格可以增强代码的可读性,使代码更清晰。

int result = number1 + number2; // 在操作符前后添加空格

4. 换行

当一行代码太长时,适当地换行可以增强代码的可读性。例如,方法调用或逻辑表达式过长时,可以将其拆分成多行。

if (condition1 && 
    condition2 && 
    condition3)
{
    // 代码逻辑
}

5. 一致性

保持代码格式的一致性非常重要。团队内部应该约定好一种代码格式,并且保持一致性。

以上这些是初学者可以采用的一些方法,它们可以提高代码的可读性和可维护性。初学者应该根据个人喜好或团队的编码规范来选择最适合自己的格式化方式,并且保持一贯性。IDE(集成开发环境)通常也会提供自动格式化代码的功能,初学者可以利用这些功能来确保代码的一致性和规范性。

六、语句

程序员

这个程序中的语句在哪里?

在这里插入图片描述

在这个示例中,Main 方法内的语句是在花括号 {} 内部的 Console.WriteLine() 语句。这个语句负责向控制台输出一条消息。在C#中,语句通常以分号 ; 结尾,并在方法内执行特定的操作。

七、从程序输出文本

程序员

以“从程序中输出文本“为主题,“Write”,“WriteLine”,“格式字符串”,“多重标记和值”,“格式化数字字符串”,各为一小节,对这个程序进行分析

在这里插入图片描述

好的,让我逐个解释你提到的主题,并对给出的程序进行分析:

主题:从程序中输出文本

1. Write 和 WriteLine 方法
  • WriteWriteLine 是用于向控制台输出文本的方法。
  • Write 方法输出文本并保持光标在同一行。
  • WriteLine 方法输出文本并在末尾添加换行符,将光标移到下一行。
2. 格式字符串
  • 格式字符串允许你以指定的格式输出文本。在这个例子中,“Hello, World!” 是一个简单的格式字符串。
  • 格式字符串可以包含文本和占位符,用于插入变量或其他内容。
3. 多重标记和值
  • 可以使用多个标记和值来构建格式化的输出。这些标记可以是字符串中的占位符,对应输出的值会替换这些占位符。
  • 在示例中,“Hello, World!” 是一个固定的字符串,没有额外的标记和值。
4. 格式化数字字符串
  • 该程序中没有格式化数字字符串的部分,因为没有数字相关的处理或格式化。

对给出的程序进行分析

using System;

namespace MyNamespace
{
    class Program
    {
        static void Main()
        {
            // 输出文本到控制台
            Console.WriteLine("Hello, World!");
        }
    }
}

由于分析过程与上述分布介绍内容重复过多,故在此不做展示
且以上内容缺乏示例代码,故需要重新提出要求如下

程序员

1、Write 和 WriteLine 方法
列出同一段示例代码,用这两者分别输出来表示二者的不同
2、格式字符串
对”格式字符串可以包含文本和占位符,用于插入变量或其他内容“举出示例代码说明
3、多重标记和值
对第一点举出示例代码,并说明使用多重标记和值时我们应注意什么?
4、格式化数字字符串
说明什么是“格式化字符串”?
“格式化字符串”的应用场景?
“格式化字符串”有哪些格式?
以上三点在说明的同时与文本字符串做对比

在这里插入图片描述

1. Write 和 WriteLine 方法

使用 Write 方法和 WriteLine 方法输出同一段示例代码:

using System;

namespace MyNamespace
{
    class Program
    {
        static void Main()
        {
            // 使用 Write 方法
            Console.Write("Hello, ");
            Console.Write("World!");

            // 使用 WriteLine 方法
            Console.WriteLine("Hello, World!");
        }
    }
}
  • Write 方法输出 "Hello, " 和 “World!”,但两个文本之间没有换行,光标停留在同一行。
  • WriteLine 方法输出 “Hello, World!” 并在末尾添加换行符,将光标移到下一行。

2. 格式字符串

示例代码说明格式字符串可以包含文本和占位符,用于插入变量或其他内容:

using System;

namespace MyNamespace
{
    class Program
    {
        static void Main()
        {
            string name = "Alice";
            int age = 30;

            // 使用格式字符串
            Console.WriteLine("Name: {0}, Age: {1}", name, age);
        }
    }
}
  • Console.WriteLine 中的格式字符串 “Name: {0}, Age: {1}” 包含了两个占位符 {0}{1}
  • 在输出时,占位符 {0} 被变量 name 的值替换,占位符 {1} 被变量 age 的值替换。

3. 多重标记和值

在上面的示例中使用了多重标记和值:

using System;

namespace MyNamespace
{
    class Program
    {
        static void Main()
        {
            string name = "Alice";
            int age = 30;

            // 使用多重标记和值
            Console.WriteLine("Name: {0}, Age: {1}", name, age);
        }
    }
}

注意事项:

  • 使用多个标记和值时,要确保值的顺序与标记的顺序相对应,以便正确地插入到格式化字符串中。
  • 如果标记和值的数量不匹配,将会导致编译时或运行时的错误。

4. 格式化数字字符串

  • 格式化字符串指的是包含特定格式占位符的字符串,用于指导输出文本的格式化。在C#中,使用 {} 中的数字或命名占位符来格式化字符串。
  • 应用场景:格式化字符串可用于输出复杂的文本格式,如创建报表、显示日期时间等。
  • 格式:格式化字符串的格式可以包括数字、日期、货币、小数点等格式。

程序员

根据以上文本举出具体示例代码,如创建报表的示例代码

当涉及创建报表时,格式化字符串可以用于设置报表的不同部分,例如标题、数据行等。以下是一个简单的示例,演示如何使用格式化字符串创建报表:

假设有一个报表,包括标题、表头和数据行。我们将使用字符串的格式化功能来构建这个报表:

using System;

class Program
{
    static void Main()
    {
        // 报表标题
        string reportTitle = "Sales Report";

        // 表头
        string headerFormat = "{0,-15} {1,-10} {2,-10}"; // 每列宽度为 15、10、10

        string header = string.Format(headerFormat, "Product", "Quantity", "Revenue");
        string separator = new string('-', header.Length);

        // 数据行
        string dataFormat = "{0,-15} {1,-10} {2,-10:C}"; // 金额格式化为货币形式

        string[] products = { "Product A", "Product B", "Product C" };
        int[] quantities = { 100, 150, 80 };
        decimal[] revenues = { 5000.50m, 7500.75m, 4000.20m };

        Console.WriteLine(reportTitle);
        Console.WriteLine(separator);
        Console.WriteLine(header);
        Console.WriteLine(separator);

        for (int i = 0; i < products.Length; i++)
        {
            string dataRow = string.Format(dataFormat, products[i], quantities[i], revenues[i]);
            Console.WriteLine(dataRow);
        }
    }
}

这个示例创建了一个简单的销售报表。在此示例中,string.Format 方法用于将字符串格式化为所需的列宽和格式。{0,-15} 表示第一个占位符,宽度为 15 个字符,并左对齐数据。{1,-10} 表示第二个占位符,宽度为 10 个字符。

数据行中,使用了 C 标识符将金额格式化为货币形式,{2,-10:C} 中的 -10 指定了货币值的宽度为 10 个字符,并且左对齐。

通过将这些格式化的字符串应用于报表的各个部分,我们能够以一种有组织且易于阅读的方式呈现数据。

请注意,此示例是一个简化版本,实际报表可能需要更多的复杂性和格式化,具体格式取决于报表的需求和特定的数据类型。
与文本字符串对比:

  • 文本字符串是普通字符串,不包含特定的格式化标记,用于直接显示文本。
  • 格式化字符串用于控制输出内容的格式,允许我们以特定的格式输出数据。

八、注释

程序员

对C#注释展开描述

1. 单行注释

单行注释使用 // 符号,用于在代码中单独注释一行内容。

示例代码:

// 这是单行注释
int x = 10; // 这是单行注释,用于解释变量的初始化

重要内容:

  • 单行注释在 // 符号后面直到该行结束处为注释内容。
  • 用于提供对代码的解释、说明或临时禁用一行代码。

2. 多行注释

多行注释使用 /* */ 符号,用于注释多行或块状内容。

示例代码:

/*
这是
多行注释
*/
int y = 20; /*
这是多行注释,可以跨越多行,
也可以位于代码行内的任意位置
*/

重要内容:

  • 多行注释从 /* 开始,到 */ 结束,中间内容全部被注释掉。
  • 用于临时禁用多行代码块或提供详细的注释说明。

3. 文档注释

文档注释是一种特殊的注释,用于生成代码文档。

示例代码:

/// <summary>
/// 这是文档注释,用于注释类、方法、字段等成员。
/// </summary>
public class MyClass
{
    /// <summary>
    /// 这是一个方法的文档注释。
    /// </summary>
    /// <param name="x">参数 x 的说明。</param>
    /// <returns>返回值的说明。</returns>
    public int MyMethod(int x)
    {
        return x;
    }
}

重要内容

  • 文档注释以 /// 开头,用于对类、方法、字段等成员提供详细的描述。
  • 包含 <summary>, <param>, <returns> 等标签,用于生成代码文档,帮助其他开发者理解代码。

注释总结

  • 注释在代码中用于解释、说明和文档化代码的作用和意图。
  • 单行注释 // 用于单独一行或一行代码的解释。
  • 多行注释 /* */ 用于多行或块状内容的注释。
  • 文档注释 /// 用于生成代码文档,提供对类、方法、参数等的详细描述。

补充说明

程序员

补充vs2010中注释的快捷键

在这里插入图片描述

当涉及到VS2010中注释的快捷键时,以下是对应功能的常用快捷键:

单行注释

  • 添加单行注释:选中要注释的代码行,使用快捷键 Ctrl + /

多行注释

  • 添加多行注释:选中要注释的代码块,使用快捷键 Ctrl + Shift + /

纠正

程序员

纠正:
在vs2010中,添加单行/多行注释,选中要注释的内容,单击“/” 即可
也可使用快捷键ctrl+E,ctrl+C实现对任意选中行注释
在vs2010/2019中,(ctrl+K,ctrl+C)或者(ctrl+E,ctrl+C)都可实现多行注释

由于chatgpt提供的快捷键适合于vs2019不适于vs2010,所以我重新编辑了要求如下

程序员

补充vs2010在编写C#代码时注释的快捷键

在这里插入图片描述

在Visual Studio 2010中,编写C#代码时的注释快捷键如下:

单行注释

  • 添加单行注释:选中要注释的代码行,使用快捷键 Ctrl + K, Ctrl + C

取消单行注释

  • 取消单行注释:选中已注释的代码行,使用快捷键 Ctrl + K, Ctrl + U

多行注释

  • 添加多行注释:选中要注释的代码块,使用快捷键 Ctrl + Shift + /

这些快捷键可帮助在Visual Studio 2010中更轻松地添加或取消单行或多行注释,提高代码的可读性和注释的管理效率。

我们看到,ChatGPT也不是一定正确

再次修改

程序员

补充vs2010在编写C#代码时注释的快捷键,包含单行注释,多行注释,文档注释,且你上一段回复“添加多行注释”的快捷键并不生效。

在这里插入图片描述

在 Visual Studio 2010 中,编写 C# 代码时的注释快捷键如下:

上文相同略去

多行注释

  • 添加多行注释:选中要注释的代码块,使用快捷键 Ctrl + Shift + /。此快捷键是在 Edit -> Advanced -> Insert Comment 或者 Edit -> Advanced -> Remove Comment 下,选择 Ctrl + Shift + / 添加多行注释或者移除多行注释的。
    ···

最后通牒

程序员

在Edit -> Advanced -> Insert Comment目录下,并未找到可以设置多行注释的功能

在这里插入图片描述

在 Visual Studio 2010 中,关于多行注释的快捷键或选项可能会因版本或设置而有所不同。在某些较早的版本中,没有专门的快捷键来添加或删除多行注释。通常情况下,多行注释需要手动输入 /* */ 来完成。

对于 Visual Studio 2010 及早期版本,可能无法直接使用特定的快捷键来添加多行注释或取消多行注释。若需要添加多行注释,可以手动输入 /* 来开始注释,输入 */ 来结束注释。同时,也可以使用单行注释 // 来一行一行地注释代码。

如果您在 Visual Studio 2010 中未找到特定的快捷键或选项用于多行注释,请尝试手动输入 /* */ 或使用单行注释来进行相应的代码注释。


总结

ChatGPT只是一个程序,它无法真正的思考或感知。ChatGPT产生的任何回复,都只是根据数据进行的预测,并不意味着它理解话题,所以,与ChatGPT交谈时要理性判断其回复。

今天的AI教学就到此结束了,有任何错误和不足还望诸位指出,感谢大家的喜爱,喜欢本文的话,点赞收藏支持一下博主吧!


http://www.niftyadmin.cn/n/5315055.html

相关文章

3D软件坐标系速查【左手/右手】

本文介绍不同3D软件的世界坐标系之间的差异及其工作原理。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 基本上&#xff0c;游戏引擎和3…

第五章 Tomcat

第五章 Tomcat 1.JavaWeb概念2.Web资源的分类3.常见Web服务器4.Tomcat服务器和Servlet版本的对应关系5.Tomcat服务器的安装6.Tomcat目录的介绍7.如何启动Tomcat服务器8.常见Tomcat启动失败的原因9.另一种启动Tomcat服务器的方式catalina run10.停止Tomcat服务器的几种方式11.修…

【Linux】nmap命令:扫描网络中的主机和端口

目录 1.扫描特定IP地址的所有端口&#xff1a; 2.扫描特定IP地址的特定端口&#xff1a; 3.扫描一个IP地址范围的端口&#xff1a; 4.扫描特定端口范围&#xff1a; 5.扫描并显示所有端口的详细信息&#xff1a; 6.扫描并输出XML格式的结果&#xff1a; 7.使用“ping…

leetCode 128.最长连续序列

给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 …

Low Poly Cartoon House Interiors

400个独特的低多边形预制件的集合,可以轻松创建高质量的室内场景。所有模型都已准备好放入场景中,并使用一个纹理创建,以提高性能!包含演示场景! 模型分类: - 墙壁(79件) - 地板(28块) - 浴室(33个) - 厨房(36件) - 厨房道具(68件) - 房间道具(85件) - 灯具(…

【Spring】容器

注意点&#xff1a; p命名和c命名空间不能直接使用&#xff0c;需要导入xml约束&#xff01; xmlns:p"http://www.springframework.org/schema/p" xmlns:c"http://www.springframework.org/schema/c"使用注解实现自动装配 jdk1.5 支持的注解&#xff0c;…

k8s-存储 11

一、configmapu存储 首先&#xff0c;确保集群正常&#xff0c;节点都处于就绪状态 Configmap用于保存配置数据&#xff0c;以键值对形式存储。configMap资源提供了向 Pod 注入配置数据的方法&#xff0c;旨在让镜像和配置文件解耦&#xff0c;以便实现镜像的可移植性和可复用…

vercel部署twikoo后评论收不到通知邮件问题解决方法

&#x1f4cc; 前言&#xff1a;本文主要是总结一下在vercel部署twikoo后收不到评论邮件通知问题的解决方法&#xff0c;本人在各种查资料无果后最终去twioo的git官方项目的issue中找到某位大佬给出的原因以及解决方案&#xff0c;故做此记录&#xff0c;希望对遇到此问题的同学…