CSharp
int类型变量之间运算,无论是加减乘除得到的结果都是int类型,如果有一个更大范围的变量类型参与运算,那就是最大类型的,比如double
int a = 10; int b = 3; double c = a / b; Console.WriteLine(c);//3 double d = a * 1.0 / b; Console.WriteLine(d);//3.33333333... double e = 10; var f = e / b; Console.WriteLine(f.GetType());//System.Double Console.ReadLine();
其实上面的道理很简单,比如100以内范围的数字,两个相加求平均,无论如何都小于100,一旦有一个数字是大于一百的,那平均数就可能大于100了,即,有一个数字超出预订范围,那结果可能也会超出小的那个范围圈!
保留指定位数小数:“{0:0.00}”,d
//保留n位小数 Console.WriteLine("{0:0.00},{1}", d, d);//3.33
@符号在C#中有两个作用
作用1、在字符串的前面加@表示取消字符串中的转义
例如 string path=@"d:\root\subdir";
作用2、如果用户定义的对象名和系统关键字冲突,可以在变量前面加入@
例如 string @Class="this is a test";
int a = 5; int b = a++ + ++a * 2 + --a + a++; Console.WriteLine(a);//7 Console.WriteLine(b);//31
上面说明,变量在参与运算时,无论是前置还是后置++/--,其在运算式中确定具体值后立即执行相关运算效果!
5+7*2+6+6=31
三个+1 ,一个-1,总体+2
有几个变量参与运算的符号,就叫几元运算符......加减乘除都叫二元运算符!
switch + while + try catch
int str; bool flag = true; while (flag) { Console.WriteLine("请输入你的数字"); try { str = Convert.ToInt32(Console.ReadLine()); switch (str % 3) { case 1: case 2: Console.WriteLine("余数为1或2"); break; default: Console.WriteLine("整除"); break; } Console.WriteLine("你输入的数字为{0}", str); } catch (Exception) { Console.WriteLine("输入有误。。。程序结束"); flag = false; } } Console.ReadKey();
枚举类型可以和int互转,如果int值超出了枚举的数量范围,那么转换后还是int类型。。。
所有的类型都可以用ToString()转换成string类型。
字符串类型的数字转换为枚举类型。。。State steta = (State)Enum.Parse(typeof(State), i);
class Program { static void Main(string[] args) { //将string 类型的数字转化为枚举。。。如果数字超出,那就输出数字,如果非数字就报错 string i = "1"; State steta = (State)Enum.Parse(typeof(State), i); Console.WriteLine("{0}的类型是{1}", steta, steta.GetType());//Busy的类型是ConsoleApp4.State Console.ReadLine(); } } public enum State { Online, Busy, Offline }
并不是所有非数字的字符串都会报错,如果字符串为枚举中有的值,那么输出该枚举类型的值,不会报错!
枚举转string,直接ToString()
和类的区别:
不能继承其他结构或类,也不能作为基础结构被其他结构或类继承
可以实现多个接口、可以不使用new操作符 即可实例化
类是引用类型,结构是值类型 (对象是引用类型,枚举、int、double等基本类型都是值类型)
结构不能声明默认的构造函数
结构体中声明的字段无法赋予初值,类可以
类的对象是存储在堆空间,结构存储在栈空间,堆空间大,但是访问速度慢,栈小速快
类是对对象的引用地址的传递,结构是对象的直接拷贝
c#中简单类型,int、double、bool等都是结构类型!
结构中属性和方法默认都是private
public struct Student { public string Name; public int Age; public string SchoolName; public string Say() { return $"{Name}说:我今年{Age}岁了,我在{SchoolName}读书"; } } class Program { static void Main(string[] args) { Student xiaoming; xiaoming.Name = "小明"; xiaoming.Age = 23; xiaoming.SchoolName = "东风小学"; Console.WriteLine(xiaoming.Say()); Console.ReadLine(); } }
结构中的属性叫字段,需要修饰符public,private等,而基本类型int等变量在声明时不需要这些修饰符(写了会报错)
字段可以存储多个值,而变量只能存储一个值!这是本质的区别
结构中字段命名最好前面加个下划线。。。
结构其实也是一个类型,上例中xiaoming这个变量的类型就是Student这个结构类型。
上面实例化就没有使用new,就跟声明变量一样,当然也可以使用new来实例化:
Student xiaolan = new Student { Name = "小兰", Age = 33, SchoolName = "西门小学" }; Console.WriteLine(xiaolan.Say());//小兰说:我今年33岁了,我在西门小学读书