一、
这个感觉没什么好说捏……
表达式,命令,声明是编程语言的基本组件。表达式可以得到一个值、一个对象、一个方法、一个方法的重载、一个名称空间、一个类等等等。
要注意的:
1.
此处只是得到这个方法,并不是要调用他(没用())
类似于C的函数指针。
static void Main()
{
Action myAction = new Action(Console.WriteLine);
}
2.
??:x是null吗?是的话把y变成100.
但是注意,y的type仍然跟x是一样的,是double。
static void Main()
{
double? x = null;
var y = x ?? 100;
Console.WriteLine(y.GetType().Name);
}
//输出结果:Double
但是好像涉及到类,如果x非空结果还是一样的,与x的类型相同。但是如果x是空,这一点就很不同捏。毕竟似乎gettype到的是牵引着的实例的类型。
static void Main()
{
haha x = null;
Program t = new Program();
var y = x ?? t;
Console.WriteLine(y.GetType().Name);
}
//运行结果:Program
3.?:操作符
如果涉及的没有变量的话,对于值类型,会选择左右两边精度更高的作为返回的类型。
static void Main()
{
var y = 5 > 3 ? 2 : 3.0;
Console.WriteLine(y.GetType().Name);
}
而且注意,写在冒号两边的东西必须能进行隐式类型转换。
二、语句概述
程序中语句执行的顺序称为控制流,也叫做执行流。
根据输入数据不同,语句不变,每次程序执行的控制流可能改变。
static void Main()
{
string result = Console.ReadLine();
try
{
double score = double.Parse(result);
if (score >= 60)
{
result = "Pass!";
}
else
{
result = "Failed!";
}
Console.WriteLine(result);
}
catch
{
Console.WriteLine("Invalid input!");
throw;
}
}
语句由分号结尾,但不一定所有分号结尾的都是语句。
如:using Systerm;是一个指令,public static int a = 0;是字段的声明
语句一定是出现在方法体的。
C#语言中的语句类型:
语句分为标签语句,声明语句和嵌入式语句。
下面让我们来一一介绍。
三、
1.声明语句
分为局部变量声明和局部常量声明。
变量声明:
类型+声明器(变量名+初始化器)
局部变量类型有具体类型和var类型。
常量声明:
const+类型+声明器(变量名+初始化器)
必须有初始化器。
2.表达式语句
语句表达式+分号
当然不是所有的表达式都可以作为语句。
3.选择语句
4.try语句
try用于捕捉语句块的各种异常。尝试执行一个语句块,使用catch语句分门别类对异常进行处理。而try语句还有一个子句finally语句,不论是否异常都会执行。
一个try语句只能有一个finally语句,可以有多个catch语句,但只能执行多个catch语句中的一个。catch有两类,一类是通用的,一类是专用的。
namespace ConsoleAppPractice
{
class Program
{
static void Main()
{
Calculator it = new Calculator();
Console.WriteLine(it.Add(null,"aaa"));
}
}
class Calculator
{
public int Add(string a,string b)
{
int result;
int m = 0, n = 0;
try
{
m = int.Parse(a);
n = Convert.ToInt32(b);
}
catch (ArgumentNullException ane)
{
Console.WriteLine(ane.Message);
}
catch (FormatException)
{
Console.WriteLine("Your string form is invalid...");
}
finally
{
if (hasError)
{
Console.WriteLine("Error...");
}
else
{
Console.WriteLine("Done.");
}
}
result = m + n;
return result;
}
}
}
try不能同时检测出两个错误,因为会立马乌拉。
finally语句中,我们一般会写两个内容。一是释放系统资源,如关闭数据库连接等等。二是程序的log(执行记录)。
throw关键字是把错误丢给调用者处理。
5.迭代语句(循环语句)
foreach语句用于枚举一个集合的元素,即遍历,并对每个元素进行一次相关语句。
5.1什么样的集合可以被遍历?
对于array数组这个类,含有该接口的类型才能被遍历。其只有一个方法成员:得到这个集合的迭代器。
对于泛型的list也是如此。
5.2迭代器
迭代器其实相当于指针,可以逐个指向访问集合中的元素。
它这个bool类型的,如果还能移向下一个则返回true。
current是当前访问的元素,reset是拨回到集合最开始,不指向任何元素。
static void Main()
{
List<int> a = new List<int>() { 1, 2, 3, 4 };
IEnumerator enumerator = a.GetEnumerator();//此处有子类包含父类方法的知识
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
enumerator.Reset();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
}
foreach就相当于对集合遍历的一种简记法。
static void Main()
{
List<int> a = new List<int>() { 1, 2, 3, 4 };
foreach ( var current in a)
{
Console.WriteLine(current);
}
}
6.跳转语句
continue.goto.break.return.throw
使用return原则:尽早return。
上面的写法比下面好