Vistual Stdio 2022正式版发布有一段时间了,新版支持C# 11,新增加了语法,部分调用方法也有说改变,记录一下也方便自己以后备查。
默认在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}");
}
}
示例如下:
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",
};
}
之前定义了类ClassTest,可以更简洁的定义,参考:
PascalMing.ClassTest test = new ();
Encoding编码和解码直接使用报错,需要做小的调整。
Encoding需要在NuGet包中安装包System.Text.Encoding.CodePages并在使用前注册。
调用前先初始化,然后调用,参考:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding encoding = Encoding.GetEncoding("gb2312");
对象定义时,默认增加null检查,如果允许为空,定义时需要做在类后面增加”?“符号。如
PascalMing.ClassTest? test;
如果不需要,可以在.csproj工程文件中增加一行
disable