目录
一、自动属性新初始方法
namespace NewDemo
{
//旧方法
class Student
{
public Student()
{
StudentId = 1001;
Name = "张三";
Age = 25;
}
public int StudentId{get;set;}
public string Name{get;set;}
public int Age{get;set;}
public string Gender
{
get{return Gender;}
}
}
//新方法,声明的同时初始化,并且允许只读属性初始化
class Student
{
public int StudentId{get;set;} = 1001;
public string Name{get;set;} = "张三";
public int Age{get;set;} = 25;
public string Gender{get;} = "男";
}
}
二、String.Format新用法
在字符串前面添加“$”前缀(变量可以直接写在{}内,并有很强的智能提示)
static void Main(string[] args0
{
Student objStudent = new NewDemo.Student();
string s1 = $"{objStudent.Name},{objStudent.Age}";
string s2 = $"姓名={objStudent.Name},年龄={objStudent.Age}";
Console.WriteLine($"{s1},\r\n{s2});
//string s3 = string.Format("{0,10},{1:d3}",objStudent.Name,objStudent.Age);
string s3 = $"{objStudent.Name,10},{objStudent.Age:d3}";
//string s4 = string.Format("{0,10},{1,10:d3}",objStudent.Name,objStudent.Age);
string s4 = $"{objStudent.Name,10},{objStudent.Age,10:d3}";
Console.WriteLine($"{s3},\r\n{s4});
string s5 = $"{DateTine.Now:yyyy-MM-dd}";
Console.WriteLine(s5);
//典型应用
string sql = $"select Name from Students where StudentId = {objStudent.StudentId} and Age = {objStudent.Age}";
}
三、表达式应用的新特性
- 表达式属性:只有一个get访问器的单行属性可以使用lambda语法编写
class ExpressionApp { public DateTime Birthday(get;set;) = Convert.ToDateTime("1990-1-10") //旧方法 public int Age { get{return DateTime.Now.Year - Birthday.Year} } //新方法 public int Age => DateTime.Now.Year - Birthday.Year; }
-
表达式方法:只有一条语句的方法可以使用lambda语法编写
class ExpressionApp { //旧方法 public int Add(int a,int b) { return a+b; } //新方法 public int Add(int a,int b) => a+b; }
四、泛型集合的新初始方法
class NewCollectionInit
{
//旧方法
public Dictionary<string,int> OldMethod()
{
Dictionary<string,int> stu = new Dictionary<string,int>();
stu.Add("张三",25);
stu.Add("李四",30);
stu.Add("王五",27);
return stu;
}
//新方法
public Dictionary<string,int> NewMethod()
{
Dictionary<string,int> stu = new Dictionary<string,int>()
{
["张三"] = 25;
["李四"] = 30;
["王五"] = 27;
};
return stu;
}
}
五、static声明静态类的引用
using static System.Math;
class StaticClassApp
{
//旧方法:两数绝对值相加
public static int OldMethod(int a,int b)
{
return Math.Abs(a) + Math.Abs(b);
}
//新方法:使用using static System.Math;提前引用静态类,避免每次都调用Math类
public static int NewMethod(int a,int b)
{
return Abs(a) + Abs(b);
}
//简化
public static int NewMethod2(int a,int b) => Abs(a) + Abs(b);
}
六、nameof表达式
class NameofExpressions
{
//旧方法:当参数变化的时候,被引用的地方需要同步修改
public void OldMethod(int account1)
{
if(account1 < 100)
{
throw new ArgumentException("参数account1值不能小于100");
}
else
{
//其他操作
}
}
//新方法:使用nameof当参数变化时会在引用的地方同步变化,避免硬编码
//nameof里面可以是:类名,方法名,参数名,属性名
public void NewMethod(int account1)
{
if(account1 < 100)
{
throw new ArgumentException($"参数{nameof(account1)}值不能小于100");
}
else
{
//其他操作
}
}
}
七、Null操作符
class NullOperator
{
string[] array = new string[]{"ad","dg",null,"fae",null};
//旧方法:
public void OldMethod(int account1)
{
foreach(string item in array)
{
var length = item == null ? 0:item.Length;//为null输出0,否则输出长度
}
}
//新方法
//nameof里面可以是:类名,方法名,参数名,属性名
public void NewMethod(int account1)
{
foreach(string item in array)
{
var length = item?.Length;//如果为null直接输出null
}
foreach(string item in array)
{
var length = item?.Length ?? 0;//不为null输出长度,如果为null输出0
}
}
}