1.自动属性初始化的改进

声明属性时可以直接进行初始化

public int id {get;set;}=10;

 自动属性是省去了get和set内部的过程,而直接用set;get;这样的语句代替,

把这个过程交给了系统,系统也为这个属性动态生成一个对应的字段。

下面代码是一个自己控制get和set方法的示例:

        private int myVar;

        public int MyProperty
        {
            get { return myVar; }
            set { myVar = value; }
        }
这里最简单的逻辑。

演示:可以看到对属性赋的初值是有效的,并且正确的输出了。

 

2.静态类的引入

以控制台应用程序为例,以前在控制台输出内容时写的代码是:

Console.WriteLine("hello world");

 这里的Console就是属于System命名空间下的一个静态类。

现在可以这样用,在引入命名空间的地方,把静态类引入。

using static System.Console;

这里需要注意的是,使用static的关键字,静态类的类名要求的全名。

在代码中就能这样用了:

WriteLine("世界,你好");

 省去了静态类的开头。个人理解是为了代码的冗余。

3.string.Format的改进

这里直接更改了它的形式,已经不再使用string.Format这种形式了。

为了形成对比,下面是两个示例的比较。

原:

string name="喜欢";
string t1=string.Format("{0,10}",name);

对{0,10}的理解,0表示匹配第0个参数,10表示向左补全,使字符串长度不满10的时候左以空格补全。如果原字符串长度大于10,则这个参数将无效,如果是负数则表示右补全。

如果是{0:yyyy-mm-dd}以冒号隔开的表示以后面的格式显示数据。

新:

string name="喜欢";
string t1=$"{0,10}";

地方直接以"$"代替了string.Format,并且把参数写在{}大括号里,不再需要占位符。

 

4.集合初始化器

之前我一直是使用这样的方式初始化的,

Dictionary<string,int> dic=new Dictionary<string,int>{{"1",1},{"2",2}};

现在可以是:

Dictionary<string,int> dic=new Dictionary<string,int>{["1"]=1,["2"]=2};

个人感觉方便了一点点,在直观性方面也比较好看。

 

5.null表达式

之前只知道可空值类型,像int?这样的格式,正常情况下,值类型是不可以为null,只有引用类型才能为null;

string[] test=new string[]{"xihuan","xiaoai"};
int? length1=test[0]?.Length;
int? result=test[1]?.Length??

int d=  "sfsd"?.Length??5;

??双问号操作符,左边为null则取值为右边,左边不为null则为取值为左边。