C#中 yield 语句理解
在 C# 中 使用 协程 IEnumerable 才会用到yield 返回,在协程中可以存在多个返回值,但必须要有一个返回值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
static void Main(string[] args)
{
/*
下面是实现的是yield return 返回类型
foreach (int i in Range(-10,10))
{
WriteLine(i);
}
* */
ReadLine();
}
static void CheckedUnchecked(string [] args)
{
int x = int.MaxValue;
unchecked
{
WriteLine(x + 1);
}
checked
{
WriteLine(x + 1);
}
}
以上就是协程中yield return 的方法,可以拥有多个返回值。
checked 和 unchecked 的方法
checked 会在程序运行到 其所包括的代码块时会检查代码块中是否会存在算术运算和转换溢出,如果存在溢出情况则会停止当前程序,来报出异常。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
CheckedUnchecked(args);
ReadLine();
}
static void CheckedUnchecked(string[] args)
{
int x = int.MaxValue;
unchecked
{
WriteLine(x + 1);
}
checked
{
WriteLine(x + 1);
}
}
}
}
通过运行上方代码可以发现运行到unchecked,虽然 i 的值已经溢出但是代码任然在运行,而运行到checked代码块,则程序会停下提示 i 的值已经溢出。
try -catch -finally语句
try -catch -finally 用来抛出异常终止程序,一般是增加了程序的健壮性,用系统中的异常类,来防止用户的一些非法输入导致程序崩溃的问题,
一般来说 try 捕获到异常时程序运行到catch 代码块后,就会停止运行,catch 以后的所有代码都不会运行,但是如果我希望在这个异常被抛出后系统给出一些提示信息的话,要么在catch 中输出,要么就在finally 中抛出。
finally 的作用就是如果程序捕获到异常,在运行完catch 后还需要去执行 finally代码块中的程序。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
if(args.Length != 2)
{
throw new InvalidOperationException("Two number required");
}
double x = double.Parse(args[0]);
double y = double.Parse(args[1]);
WriteLine(Divide(x, y));
}
catch (InvalidOperationException e)
{
WriteLine(e.Message);
}
finally
{
WriteLine("Good bye!");
}
ReadLine();
}
static double Divide(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
}
}
由于 args[ ] 我们没有给值,所有默认为0 ,那么程序在 try 语句后 throw出异常信息,然后就会运行 finally 的代码块。
所以程序最后会输出 Good bye。
lock 和 using 语句
lock 语句用于获取给定对象的相互排斥锁定,执行语句,然后解除锁定。
using 语句用于获取资源,执行语句,然后释放资源。