Vistual Stdio 2022 C# 11新语法备忘

Vistual Stdio 2022正式版发布有一段时间了,新版支持C# 11,新增加了语法,部分调用方法也有说改变,记录一下也方便自己以后备查。

1、顶级语句

默认在program.cs生成的就是没有using,没有namespace,没有class和main入口的语句。经典的”hello world!“可以简单的写成

Console.WriteLine("Hello, World!");

需要注意的是,每个项目中仅允许一个文件有顶级语句。这容易理解,如果有多个文件存在顶级语句,执行时无法识别从哪里开始执行。

顶级语句文件中,同样可以写函数之类的。

做个小测试可以更加明白。

Program.cs
---------------------------------------
using System.Diagnostics;
using System.Reflection;


StackTrace trace = new();
StackFrame frame = trace.GetFrame(0);
MethodBase method = frame.GetMethod();
Console.WriteLine($"class: {method.ReflectedType.FullName}, method: {method.Name}");

PascalMing.ClassTest test = new ();
test.Do();

ClassTest.cs
---------------------------------------
using System.Diagnostics;
using System.Reflection;

namespace PascalMing;
class ClassTest
{
    public void Do()
    {
        StackTrace trace = new();
        StackFrame frame = trace.GetFrame(0);
        MethodBase method = frame.GetMethod();
        Console.WriteLine($"class: {method.ReflectedType.FullName}, method: {method.Name}");

    }
}

2、switch语句

    示例如下:

    public string TypeName()
    {
        return (TDengineDataType)type switch
        {
            TDengineDataType.TSDB_DATA_TYPE_BOOL => "BOOL",
            TDengineDataType.TSDB_DATA_TYPE_TINYINT => "TINYINT",
            TDengineDataType.TSDB_DATA_TYPE_SMALLINT => "SMALLINT",
            TDengineDataType.TSDB_DATA_TYPE_INT => "INT",
            TDengineDataType.TSDB_DATA_TYPE_BIGINT => "BIGINT",
            TDengineDataType.TSDB_DATA_TYPE_UTINYINT => "TINYINT UNSIGNED",
            TDengineDataType.TSDB_DATA_TYPE_USMALLINT => "SMALLINT UNSIGNED",
            TDengineDataType.TSDB_DATA_TYPE_UINT => "INT UNSIGNED",
			TDengineDataType.TSDB_DATA_TYPE_UBIGINT => "BIGINT UNSIGNED",
            TDengineDataType.TSDB_DATA_TYPE_FLOAT => "FLOAT",
            TDengineDataType.TSDB_DATA_TYPE_DOUBLE => "DOUBLE",
            TDengineDataType.TSDB_DATA_TYPE_BINARY => "STRING",
            TDengineDataType.TSDB_DATA_TYPE_TIMESTAMP => "TIMESTAMP",
            TDengineDataType.TSDB_DATA_TYPE_NCHAR => "NCHAR",
            _ => "undefine",
        };
    }

3、更加简洁的new

之前定义了类ClassTest,可以更简洁的定义,参考:

PascalMing.ClassTest test = new ();

4、Encoding问题

     Encoding编码和解码直接使用报错,需要做小的调整。

     Encoding需要在NuGet包中安装包System.Text.Encoding.CodePages并在使用前注册。

     调用前先初始化,然后调用,参考:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding encoding = Encoding.GetEncoding("gb2312");

5、null问题

        对象定义时,默认增加null检查,如果允许为空,定义时需要做在类后面增加”?“符号。如

PascalMing.ClassTest? test;

如果不需要,可以在.csproj工程文件中增加一行

  <PropertyGroup>
    <Nullable>disable</Nullable>
  </PropertyGroup>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值