C#复习之基本语法

2021-12-02
2 min read
Featured Image

变量

  • byte 8bit
  • int 32bit
  • short 16bit
  • long 64bit
  • ushort 16 无符号
  • uint 32bit
  • ulong 64bit
  • float
    • float fl
    • fl = 10.0f
  • double
  • decimal 货币类型
  • char 键盘, 不能为空, 单引号

溢出

byte a;

a = 1000; 变量溢出

数据类型转换

1. 整数与浮点数

  • 小进大 int 自动转换
  • 大进小需要进行强制转换
// 牵扯到一个变量名称问题
// CTS: Common Title Syetem
// int 会自动转化成 Int32
// 所以 int a 和 Int32 a 都可以用来生成变量
  • int.Parse
  • Convert.ToInt32(s) 数据类型 转化成通用变量

2. 字符串与其他类型转换

  • 跟上面一样

基本运算

移位运算

int a = 5;
b = a >> 2; 
  • 首先把 a 转换成 2 进制, 可以得到 a=101
  • 把 101 右侧看成一堵墙, 即 101|
  • 往右移位就把整体往右移动两位
  • 整体变为 1|01, 只读取墙左边的数值
  • 最后 a 变为 1
b = a << 2; // 10100 => 20

== 和 Equals 的区别

  • 实际上字符串就是一串字符的数组
String a = new String(new char[]{'a','b','c'});
String b = new String(new char[]{'a','b','c'));
                                 
// a == b 是错误的 因为 a 和 b 的地址不一样. (验证后发现都是对的)
// a.Equal(b) 是对的

疑问(未解决)

#region == 和 Equals 的区别
String a = new string(new char[] { 'a' });
String b = "a";
Console.WriteLine(a == b);
Console.WriteLine(a.Equals(b));
#endregion
// 输出都是 true 

循环

for 循环

for(int i = 0; i < 10; i++){
  
}
  
// 里面的执行顺序是转圈 i<10 -> {} -> i++ -> i<10 -> {} ->... 

foreach 循环

  • 迭代只读
  • 效率比 for 要高
foreach (int item in scores) {
  item += 10; // 不合法
}

数组

  • 二维数组初始化
int[,] a = new int[3,4];
a[2,2] = 10;
// 数组长度
a.Getlength(0) // 一维长度
a.Getlength(1) // 二维  长度

字符串

  • 字符串初始化
String s1 = "abc";
String s2 = new String(new char[]{'a','b','c'});
  • 字符串方法
s1.CompareTo(s2) // 如果是 0, 就是相等.
s1.Equals(s2) // 相等 true, 区分大小写.
s1 = s1.Trim() // 去掉空格.
s1 = s1.ToUpper() // 大写
s1 = s1.ToLower() // 小写
s1 = s1.Replace('a','c') // c 把 a 换了
s1 = s1.Substring(2); // 从 2 往后截取
s1 = s1.Substring(2,3) // 从 2 往后截取 3 个长度.
String[] s1 = s2.spit(''); // 以参数为分割, 返回到字符串数组里.
int index = s1.IndexOf(" ") // 定位
  • 字符串拼接的效率
s += a; // 效率低

StringBuilder sb = new StringBuilder();
sb.Append("a"); // 效率高

Avatar
Aaron Fan My research interests include machine learning, signal processing, web development and robotics.