内容
chap5 字符串处理与数学运算
5.1 对象的字符串表示形式
重写ToString方法
通过重写ToString方法来实现把对象实例转化为字符串表示形式。ToString方法是在Object类中定义的。public virtual string ToString()
代码在\第5章\Example_1 扩展方法
扩展方法 为静态的公共方法,在第一个参数前加上this关键字指明要扩展的类型。代码在\第5章\Example_2 5.2 字符串的串联与拆分
使用+运算符串联字符串
int n=100; string s="整数值为:" + n.ToString();
使用join方法拼接字符串数组
string[] strarr1={"a","b","c"}; Console.WriteLine(string.Join("/",strarr1));
//得到的字符串是"a/b/c"代码在\第5章\Example_3 使用Concat方法创建字符串
使用StringBuilder类创建字符串
使用Split方法拆分字符串
5.3 转义字符
如果希望把字符串中的字符都作为原义字符,即不考虑转义字符,可以在字符串前面加上一个“@”符号。Console.WriteLine(@"C:\tracks.doc,\t\n");
5.4 英文字母的大小写转换 5.5 Parse和TryParse方法
TryParse()
不管转化成功与否,都不会抛出异常,但会通过返回值来告诉调用者是否转化成功。代码在\第5章\Example_9 5.6 查找和修改字符串
5.7 格式化字符串
5.7.1 IformatProvider接口 5.7.2 区域性相关的信息 5.7.3 实现字符串的格式化 5.8 字符串的复合格式化
5.9 字符串内插
使用内插值的字符串需要在前面加上一个"$"符号,字符串内部的格式占位符不再使用索引值,而是将表达式直接包含在一对大括号中。string name=“小明”; string str=$"你好,{name}";
代码在\第5章\Example_18 5.10 生成随机数
Random
类代码在\第5章\Example_19 5.11 Math类与常用的数学运算
5.12 与日期时间有关的计算
DateTime
和TimeSpan
两个结构代码在\第5章\Example_21
chap6 类型转换
6.1 隐式转换
**它的转换过程由编译器自动识别,无需特殊处理,而且转换之后不会造成数据丢失,**也叫做“分配兼容性”。 隐式转换也适用于接口与实现接口 的类型 代码在\第6章\Example_1 6.2 显式转换
6.3 可以为null的值类型
System命名空间中有一个Nullable<T>
结构,该结构使得值类型可以为null。 int? x=null; int i = x??16;
代码在\第6章\Example_2 6.4 引用类型的兼容性转换
as
运算符实现引用类型或Nullable<double>类型的兼容性转换,如果转换成功就返回转换后的对象引用;如果转换失败也不会报错,并返回null。 6.5 类型转换帮助器
Convert
类和BitCoverter
类代码在\第6章\Example_5 6.6 自定义转换
implicit
:用于声明隐式转换操作explicit
:用来声明显式转换操作使用自定义转换声明,一定要注意以下几点:
必须声明为public 必须声明为静态成员(static) 用要转换的目标类型的名字作为成员名称,把待转换的类型的对象作为参数传入 在成员内部要用return关键字把转换后的对象返回给调用方
chap7 泛型、集合与变体
7.1 泛型类型
7.1.1 泛型与类
7.1.2 泛型与接口
7.1.3 泛型与类型成员
7.1.4 泛型与委托
7.1.5 泛型约束
7.2 集合
数组(映射到System.Array类)和System.Collections.ArrayList类都是集合。 7.2.1 普通集合
7.2.2 泛型集合
List<T>
HashSet<int>
Stack<T>和Queue<T>
7.2.3 字典
字典中每一个元素都是由两部分组成--键(Key)和值(Value),每个键对应一个值,并且要求键必须唯一。 Hashtable
Dictionary<TKey, TValue>
7.3 自定义排序
代码在\第7章\Example_15 和\Example16 7.4 变体
变体的引入是为了提高泛型类型的变量在赋值的时候可以对类型进行兼容性转换,以扩展泛型的灵活性。 7.4.1 协变与逆变
协变Covariant 逆变Contravariant 7.4.2 类型参数的输入与输出
7.4.3 必不可少的技巧
输入类型参数(使用in修饰符)都是逆变,输出类型参数(使用out修饰符)都是协变。
chap8 纠错与单元测试
8.1 实时纠正语法错误
8.2 代码调试
8.2.1 断点法
【调试】->【窗口】->【局部变量】 代码在\第8章\Example_1 8.2.2 输出信息法
System.Diagnostics
命名空间下的Debug 类。代码在\第8章\Example_2 8.3 断言
8.4 使用日志文件
System.Diagnostics
命名空间下的Trace 类。代码在\第8章\Example_5 8.5 异常处理
try{//可能发生异常的代码} catch(<要捕捉的异常类型>){//异常处理代码} finally {//最后处理}
代码在\第8章\Example_6 到 \Example_8 8.6 单元测试
Assert类 不是.NET框架的类,它随同VS一起安装,该类位于程序集Microsoft.VisualStudio.QualityTools.UnitTestFramework中,Microsoft.VisualStudio.TestTools.UnitTesting命名空间下。代码在\第8章\Example_9
chap9 匿名方法和Lambda表达式
9.1 匿名方法
匿名方法是不需要命名的,用一个delegate关键字代表方法的名字,没有访问修饰符,也不需要返回类型。 Action <string> act = delegate(string arg){Console.WriteLine(arg);};
9.2 Lambda表达式
更为简洁的匿名方法表示法,称为Lambda表达式。
=>
左边为匿名方法的参数列表,右边为匿名方法的语句。 9.2.1 用于赋值
(1)对于没有参数、返回值为void类型的委托Action act1 = () => {Console.WriteLine("没有参数的Action委托。");};
(3)对于有返回值的委托(返回值为非void类型)Func<int,int,int>fun1 = (a,b) => {return a*b;};
代码在\第9章\Example_1 9.2.2 用于参数传递
代码在\第9章\Example_2 到\Example3
chap10 集成化查询
LINQ(Language-Integrated Query),直译成“语言集成查询。” P262 10.1 LINQ基本语法
var result = from str in list select str;
var result = from s in list group s by s[0];
以from子句开头,都是以from...in...
开头的。 以select或group子句结尾。 10.1.1 对查询结果类型的巧妙处理 10.1.2 延迟执行与强制立即执行 10.2 筛选
where var res = from a in arr where a>20 select a;
//查询将从arr中逐个取出每个元素,并暂存到变量a,而每一轮所取出来的元素都会经过where子句的筛选,a的值大于20就执行select。代码在\第10章\Example_4 10.3 排序
orderby子句 和ascending关键字 ,默认是升序。加上descending关键字 就是降序。代码在\第10章\Example_5 10.4 分组
group子句 group emp by emp.Department into eg select eg
// 数据分组后将每个分组都存入eg变量中,随后就可以用select子句把存放在eg中的分组选择到查询结果中。IGrouping<TKey,TElement>
类型的对象代码在\第10章\Example_6到 \Example_7 10.5 更复杂的查询
10.5.1 动态创建类型 P276
动态类型 使得开发者无需事先去定义类型,就可以根据代码上下文的需要动态地去创建新类型。var newObject = new {Property1="abc",Property2=3000}
10.5.2 联合查询
join关键字 from category in categories join prod in products on category.ID equals prod.CategoryID
//将categories和products两个序列联合一起进行查询。代码在\第10章\Example_8到 \Example_9 10.5.3 嵌套查询
var res = from g in goodsArr let totalQty=(from od in orders where od.GoodsNo == g.GsNo select od).Sum(odr => odr.Qty) select new {g.GsNo, g.GsName, Total=totalQty*g.GsPrice};
//使用let关键字来声明临时变量totalQty。代码在\第10章\Example_10
转载于:https://my.oschina.net/wolflion/blog/909097