一.var隐式类型
var是一种特殊变量类型,可以表示任何类型变量.
var只能用于临时变量的声明,不能作为类成员.也就是一般写在函数语句块中.
var必须初始化.
static void Main(string[] args)
{
var i = 5;
var s = "str";
var list = new List<int>();
}
可以用于不确定类型变量.
二.设置对象初始值
声明对象时,可以通过直接写大括号的形式初始化公共成员变量和属性.
class Person
{
private int money;
public bool sex;
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
class Program
{
static void Main(string[] args)
{
//可以通过大括号,在声明对象时直接初始化公共的
//小括号可写可不写
//还是会调用构造函数的,先执行构造函数,再执行大括号赋值
Person p = new Person() { sex = true, Age = 10, Name = "C#" };
Person p2 = new Person { Age = 18 };
}
}
三.设置集合的初始值
声明集合对象时,也可以通过大括号,直接初始化内部属性.
class Person
{
private int money;
public bool sex;
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
class Program
{
static void Main(string[] args)
{
int[] array = new int[] { 1,2,3,4,5 };
List<Person> persons = new List<Person>()
{
new Person(){ sex = false},
new Person() {Age = 20}
};
Dictionary<int, string> dic = new Dictionary<int, string>()
{
{ 1, "123" },
{ 3, "hello" }
};
}
}
四.匿名类型
var变量可以声明为自定义的匿名类型.
static void Main(string[] args)
{
//类似于临时定义的一个类
//只能有变量,不能有函数
var v = new { age = 10, name = "小明" };
Console.WriteLine(v.name);
}
五.可空类型
值类型通常不能赋值为空.
//错误!
//int c = null;
但在声明时,在值类型后面加?,则可以赋为空
//不报错
int? c = null;
使用前先判断是否为空
int? c = null;
if(c.HasValue)
{
//若c不为空
Console.WriteLine(c);
Console.WriteLine(c.Value);//与上面那行一样
}
安全获取可空值的方法
int? c = null;
//参数可有可无
Console.WriteLine(c.GetValueOrDefault());//若空则返回类型默认值
Console.WriteLine(c.GetValueOrDefault(100));//若空则返回100
//但实际上GetValueOrDefault函数并不会改变变量的值!并没有给变量赋值.
//再次输出c的value也并不会变成100!
对于引用类型
object o = null;
//o.ToString();//单独执行这一句会报错1
o?.ToString();
//等价于
//if(o!=null)
//{
// o.ToString();
//}
int[] array = null;
//Console.WriteLine(array[0]);//报错!
Console.WriteLine(array?[0]);
//等价于
//if(array != null)
//{
// Console.WriteLine(array[0]);
//}
Action action = null;
//action();//报错!
//action.Invoke();//爆粗
action?.Invoke();
//等价于
//if(action!=null)
//{
// action();
//}
六.空合并操作符
左边值 ?? 右边值
如果左边值为null,就返回右边值,否则返回左边值.
只要是可以为null的类型都能用.
int? v = null;
int i = v == null ? 100 : v.Value;//v.Value才是具体的int值
//等价于
i = v ?? 100;
//等价于
if(v.HasValue)
{
i = v.Value;
}
else
{
i = 100;
}
七.内插字符串
关键符号 $
用$来构造字符串,让字符串中可以拼接变量
string i = "sss";
Console.WriteLine($"hello,{i}");
//等价于
Console.WriteLine("hello,{0}", i);
八.单据逻辑的简略写法
//if单句省略大括号
if (true)
Console.WriteLine("123");
//while单句省略大括号
while(true)
Console.WriteLine("123");
//for单句省略大括号
for (int i = 0; i < 10; i++)
Console.WriteLine("123");
private string name;
//public string Name
//{
// get
// {
// return "sss";
// }
// set
// {
// name = value;
// }
//}
//若只有一行,可简写为
public string Name
{
get => "sss";
set => name = value;
}
//public int Add(int x, int y)
//{
// return x + y;
//}
//若只有一句,可简写
public int Add(int x, int y) => x + y;
资料来源<唐老狮C#教程>