C#基础总结

最近因为工作需要学习C#,简单总结下C#中我之前没有见过的语言特性

  • 1Main1方法第一个字母使用大写

控制台输入输出

* 输出	`System.Consolve.WriteLine()/Write()`
	* 两者之间的区别:`WriteLine` 输出回车
* 输入	`System.Consolve.ReadLine()/Read()/Key`
	* 区别:
	`ReadLine `读取一行
	`Read` 返回与读取的字符值对应的整数。
	`ReadKey` 返回用户的单次输入
  • 字符串插值
    • 在Write函数调用总为字符串字面值附加$
      例:string name = "Jack"; System.Consolve.Write($"your name: {name}");
      输出:your name : Jack;
  • 复合格式化:string.Format("hello world {0} {1}", 参数1, 参数2...)
  • C# 允许在字符串前使用 @符号,指明转义序列不被处理
  • C# 在Write中使用 + 操作符连接字符串
  • $ 与 @ 结合使用System.Consolve.WriteLine($@"your full name is : {firstname} {lastname}") 注:VisionPro8.2不支持
  • 输出左右大括号:$"{{ {price:C2} }}" 结果为:{$1, 234.56}
  • 使用 System.WriteLine() 和 System.Environment.NewLine输出回车,而不要用 \n
  • null 值赋给 string 变量和为变量赋值 " "也是不一样的概念。

数据类型(基本数据类型、引用、数组)

  • 浮点数精度由有效数位的个数决定,而不是由一个固定值。浮点数在计算机中使用二进制表示,转换成10进制可能造成精度丢失。建议高精度的数据使用 decimal
  • 虽然理论上一个二进制位足以容纳一个布尔类型的值,但 bool 实际大小是一个字节
  • void 本质上不是数据类型,它只是指出没有数据类型这一事实。
  • checked? 暂时放置
  • 每个数据类型都包含一个Parse()方法,允许将字符串转换为对应的数值类型。从C#2.0起,所有基缘数值类型都包含静态方法 TryParse()方法,他转换失败不引发异常,而是返回 false
    • 用法
      double number;
      string input;
      double.TryParse(input, out number);
  • 所有类型都支持ToString方法,用它提供类型的字符串表示。大多数类型的 ToString()方法只是返回数据类型的名称,而不是数据的字符串表示。只有在类型显示实现了 ToString() 的前提下才会返回字符串表示。
  • 一个类型要么是值类型,要么是引用类型
  • 为引用类型的变量分配实际数据的内存区域称为堆
  • 如对象在逻辑上是固定大小、不可变的值,就考虑定义成值类型。如在逻辑上是可引用、可变的东西,就考虑定义成引用类型。
  • 基元类型的默认值:
    • 引用类型初始化为 null
    • 数值类型初始化为 0
    • bool 初始化为 false
    • char 初始化为 \0
  • 在C# 中只有赋值、调用、递增、递减、await和对象创建表达式才能作为独立的语句使用。
  • 在C#中,浮点数 0 除以 0 会得到 “Not a Number”,输出为 NAN
  • 赋值操作符首先计算要赋的值,再进行赋值

函数

  • 要为方法使用名词或者动词短语
  • C#不支持全局方法,一切都必须写在一个类声明中
  • System.Environment.GetCommandLineArgs() 返回由命令行参数组成的数组。
  • 引用类型,函数定义和函数调用都需要添加引用修饰符
    • ref 与 out
      • 区别 ref 只能传入饮用后的参数,而out在使用前必须先声明(C#7.0 以后不需要再声明)
    • in 只读引用
  • C# 使用 params 关键字声明方法中数组参数可变
    • 参数数组必须是最后一个参数
  • 方法的唯一性取决于方法名、参数类型或参数数量的差异。
  • 将核心功能放到单一方法中供其他重载方法调用,以后就只需在核心方法中修改,其他方法将自动受益
  • 要尽量为所有参数提供好的默认值
  • 要提供简单方法的重载,必须参数的数量要少
  • 考虑从最简单到最复杂组织重载

异常

  • 要在抛出的异常中描述异常为什么发生。顺带说明如何防范最佳
  • catch块必须从最具体到最不具体排列
  • 避免捕捉无法从中完全恢复的异常。这种异常不处理比不正确处理好
  • 避免在重新抛出前捕捉和记录异常。要允许异常逃脱,直至他被正确处理
  • 要在捕捉并重新抛出异常时使用空的throw语句,以便保留调用栈。
  • 要通过抛出异常而不是返回错误码来报告执行失败。
  • 不要让公共成员将异常作为返回值或者out参数。抛出异常来指明错误,不要把它们作为返回值来指明错误。
  • 不要用异常来处理正常的、预期的情况,用它们处理异常的、非预期的情况。

预处理指令

  • 常见用法
    • 控制何时以及如何包含代码
    • 处理不同平台之间的差异
    • 调试
  • 指令
    • #error和#waning 指令分别生成错误和警告消息
    • #region, #endregion 声明代码区域

数组

  • 数组声明 stirng[] languages;
  • 由于数组大小不需要作为变量声明的一部分,所以可以在运行时指定数组大小
  • 二维数组与交叉数组
    • 二维数组 int[,] cells;
    • 交叉数组 int [][] cells;
    • 区别:交叉数组行的元素数量可以不同,但二维数组不可以。
  • System.Array
    Sort() 排序
    BinarySearch 二分搜索
    Reverse() 反转
    Clear() 将数组中每个元素都设置为默认值
  • 成员方法
    • GetLength() 获取特定维度的数组长度
    • Rank() 获取数组维度
  • 字符串可以作为数组读取,但不能修改

string

  • string 字符串不可变,没有提供修改字符串内容的机制。
  • 如有多个内容需要修改,比如要经理多个步骤构造一个长字符串,可以考虑使用System.Text.StringBuilder
    StringBuilder 包含 Append()、AppendFormat()、Insert()、Remove()和Replce()等方法。
  • string.Compare(字符串1,字符串2,是否忽略大小写_默认忽略);比较两个字符串
  • string.Format(); 返回特定格式的结果。
  • Length(): 获得当前字符串中字符的个数
  • ToUpper:将字符串转换为大写
  • ToLower():将字符串转换为小写
  • Equals(LessonTwo, StringComparison.OrdinalIgnorCase):比较两个字符串,忽略大小写
  • Split():分割字符串,返回字符串类型的数组
  • Substring():截取字符串
  • IndexOf(): 判断字符串在字符串中第一次出现的位置
  • LastIndexOf():判断字符串在字符串中最后一次出现的位置
  • StartWith(): 判断以。。。开始
  • EndWith(): 判断以。。。结束
  • Replace(): 将字符串中某个字符串替换成一个新的字符串
  • Contains():判断字符串是否包含某个字符串
  • Trim(): 去掉字符串中前后的空格
  • TrimEnd(): 去掉字符串中结尾的空格
  • TrimStart(): 去掉字符串中前面的空格
  • IsNullOrEmpty(): 判断一个字符串是否为空或者为null
  • Join(): 将数组按照指定的字符串连接,返回一个字符串
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值