C#学习相关系列之常用符号介绍

简介: C#学习相关系列之常用符号介绍

一、=>符号的用法

=>用法主要有两种,第一种是Lambda表达式,第二种是用于赋值;

第一种lambda用法:

// 声明一个函数指针的对象, 也就是委托, 其函数签名为string f(Person)
Func<Person, string> nameProjection = p => p.Name;
 
// 上面这句, 等同于:
Func<Person, string> nameProjection = delegate (Person p) { return p.Name; };

第二种赋值用法 :

public int MaxHealth1 => x ? y:z;
//等同于属性的快写方式
public int MaxHealth1
{
    get
    {
        return x ? y:z;
    }
}

再举个例子:

class Program
{
    public class A
    {
        public static int x;//默认初始化为0
        public int X1 => x;
        public int X2 = x;
    }
 
 
    static void Main()
    {
        Console.WriteLine(A.x);// 0
 
        A a = new A();
        Console.WriteLine(a.X1);// 0
        Console.WriteLine(a.X2);// 0
 
        A.x = 5;
        Console.WriteLine(a.X1);// 5
        Console.WriteLine(a.X2);// 0
 
        A.x = 10;
        Console.WriteLine(a.X1);// 10
        Console.WriteLine(a.X2);// 0
    }
}

可以看到,每次去取X1的值的时候,都会执行return x;这个表达式,所以上面的问题解决了。

二、@符号用法

主要有两个作用:

1、不需要用\\来转义非转义符号的\号

string str=@"D:\itjsxx\icon"
//等价于
str="D:\\itjsxx\\icon"

2、可以实现多行字符串赋值

string str=@"itjsxx.com
adcd
ddd
ddd
3333
11
eee
www.itjsxx.com"

3、用关键字做变量名时前面可以加@

string @int = "www.itjsxx.com";

三、$符号的用法

1、其作用相当于对String.format()的简化。

string test = string.Format("{0:N1}", 56789)            
Console.WriteLine(test);
Console.WriteLine($"{test}");
Console.WriteLine($"{56789:N1}");

通过上述代码可以得到string.Format中{}需要0当做占位符,在“”后56789进行编译,$可以直接对{}内的变量进行编译。总结:$"“相当于 string.Format(”"),同时不需要再使用0当做占位符,可以在{}内直接添加变量。

四、三元运算符

三元运算符也被称为条件运算符,与后面要学习的 if 条件语句非常类似。

在 C# 语言中三元运算符只有一个,具体的语法形式如下。

布尔表达式 ? 表达式 1: 表达式 2

判断条件?表达式1:表达式2

其中:

布尔表达式:判断条件,它是一个结果为布尔型值的表达式。

表达式 1:如果布尔表达式的值为 True,该三元运算符得到的结果就是表达式 1 的运算结果。

表达式 2:如果布尔表达式的值为 False,该三元运算符得到的结果就是表达式 2 的运算结果。

 

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("10为:"+(10 % 2 == 0 ? "偶数":"奇数"));
    }
}

需要注意的是,在三元运算符中表达式 1 和表达式 2 的结果的数据类型要兼容。

五、符号?.条件null运算符

不为null时执行后面的操作。

estClass a = null;
int num = a?.Num;
//等价于
if(a!= null)
num = test1.Num;
else
num = 0;

六、符号?表示基本数据类型可空标识符

如果不赋予初值,C#的变量是不允许直接使用的。

但有的时候,让值的类型为空是非常有用的,搜索比如三态bool,其中一个状态便是未给定值。

泛型使用System.NullAble提供了类型值为空的一种方式。System.NullAble nullAbleInt;

因为太常用,C#特意给了一个语法快捷int? nullAbleInt;

 

* int? nVal1 = new int?();
   * int? nVal2 = null;
   * int? nVal3 = 3;
   * Console.WriteLine(nVal1);    // 输出null
   * Console.WriteLine(nVal2);    // 输出null
   * Console.WriteLine(nVal3);    //输出3

在C#中不能有空赋值,但通过数据类型后加?可以对变量进行空赋值。

七、符号??合并null运算符

为了减少可空类型的代码量,遇到null的时候C#提供了??操作符来获取如果为空的默认值。

static void Main(string[] args)
   {    int? nVal1 = null;    
    int? nVal2 = 5;    
    // nVal1为空,相乘后还是null,输出0作为默认值    
    Console.WriteLine(2 * nVal1 ?? 0);    
    // nVal2非空,取计算值输出,输出10   
    Console.WriteLine(2 * nVal2 ?? 10);}
int?a = null;
int b = a * 2 ?? 10;
Console.WriteLine(b);
Console.Read();


相关文章
|
1月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
1月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
1月前
|
C#
C#学习相关系列之yield和return的区别
C#学习相关系列之yield和return的区别
|
1月前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
1月前
|
存储 C#
C#学习系列相关之数组(一)---数组的定义与使用
C#学习系列相关之数组(一)---数组的定义与使用
|
1月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
|
1月前
|
C#
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
|
1月前
|
C#
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
|
1月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
|
1月前
|
C#
C#学习系列相关之多线程(二)----Thread类介绍
C#学习系列相关之多线程(二)----Thread类介绍