可空引用类型
举个例子,我们现在创造一个字符串
string str = "creeper?";
或者string str;
都是可以正常通过编译的,但是通常不允许string str = null;
出现。在C#8.0以上的版本中,提供了可空引用类型T?
,所以使用该类型的string? str = null;
是可以的。
但是在使用可空引用类型T?
前,必须对其是否为空进行检查,否则编译器就会核谐地丢给你一个警告。不要以为你永远用不到这个,至少事实上Console.ReadLine()
.返回的是string?,而不是string。
更好的切片
Python的优点之一就是其优雅的字符串切片查找以及列表索引。现在C#也支持从前面或者后面进行查找了,具体方法非常简单,就是把它的正面索引进行按位取反,例如:
int i = 1;
int j = ^2;
int[] list = {1,1,4,5,1,4}
//list[i] = 1 list[j] = 5
interface ICrashHandler
{
void CrashHandler(string lev,string reason);
//什么,你还没实现吗?
// 那我先帮你实现了,有空要补上啊
void CrashHandler(Exception e) => CrashHandler("err",e.Message)
}
var area = figure switch
{
Line _ => 0, //既然是零就不需要具体的字段了
Rectangle r => r.Width * r.Height,
Circle c => c.Radius * 2.0 * Math.PI,
_ => throw new UnknownFigureException(figure) //相当于default
};
更多用法请看这里∶
Point[] ps = { new Point(1, 4), new Point(3,-2), new Point(9, 5) };
Point[] ps = { new (1, 4), new (3,-2), new (9, 5) };
来创建。