当天计划
- 学习
C#迭代器、LINQ,解决昨天的报错问题(已学习)。 - 学习
SQLServer数据库设计(已学习三范式、表关系)、T-SQL、运算符、流程控制、子查询。 - 完成充电体验报告
(照片整理、范文阅读)。
C#
1.昨日报错问题解决
在看枚举器实现的视频教学时,发现在MoveNext()具体方法实现时对于_position字段的判断条件写错了。原来错误的是if(_position < _color.Length),这样表示_position实际到达数组最后一位索引时依然满足条件,返回true,导致position继续向下一项移动,导致超出了数组边界。实际中,应该在_position到达数组索引倒数第二位时终止,因为_position==Array.Length - 2 时,MoveNext()向下一项移动,即_potition==Array.Length-1到达末项就应当结束。
//修改后的代码
public bool MoveNext()
{
//if (_position < _color.Length)
if (_position < _color.Length - 1)//假设数组长5,末尾索引4,当position==3时才返回true,向下移动一位。
{
_position++;
return true;
}
else
{
return false;
}
}
2.LINQ查询变量
- LINQ查询变量为枚举类型时,只有当变量被处理时才会执行;
- LINQ查询变量为标量时,查询立即执行,并将结果赋值给变量。
如下示例代码中,lowNums查询所有numbers{2,5,28}数组中小于20的值,numsCount查询所有numbers{2,5,28}数组中小于20的值的个数;通过运行结果截图发现,在修改后新的数组是numbers{2,5,8},遍历lowNums得到的结果是(2,5,8),此时正常小于20的值的个数应该是3,但是打印numsCount的值依然是原来数组小于20的个数2。
//示例代码
static void Main(string[] args)
{
int[] numbers = { 2, 5, 28 };
IEnumerable<int> lowNums = from n in numbers
where n < 20
select n;
int numsCount = (from n in numbers
where n < 20
select n).Count();
numbers[2] = 8;//如果查询表达式返回枚举,查询一直到处理枚举类时才会执行
foreach (var item in lowNums)
{
Console.WriteLine(item);
}
//如果查询表达式返回标量,查询立即执行,并且把结果保存在查询变量中。
Console.WriteLine("小于20的数量:" + numsCount);
}
运行结果
3.using的用法
- 在文件顶部引用命名空间,如:using System;
- 为命名空间或类型定义别名;
这种做法有个好处就是当同一个cs文件引用了两个不同的命名空间,但是两个命名空间都包括了一个相同名字的类型的时候,就会为此类型命名空间创建别名。
//示例代码,为命名空间定义别名 "ElseName"和“ElseCName”
using ElseName = This.Is.Very.Very.Long.NamespaceName;
using ElseCName = This.Is.Very.Very.Long.NamespaceName.ThisIsVeryVeryLongClassName;
//通过别名实例化对象,::是命名空间别名的修饰符
ElseName::NamespaceExample NSEx = new ElseName::NamespaceExample();
ElseCName CN = new ElseCName();
- 定义一个范围,在范围结束时处理对象。
using语句提供了一个脉络清晰的机制来控制资源的生存期,创建的对象会在using语句结束时被摧毁,使用前提该对象必须继承了IDisposable接口,以下代码说明了using的机制:
string str = "LittleBai";
//创建写入字符串
Byte[] bytesToWrite = Encoding.Default.GetBytes(str); ;
//创建文件,文件流FileStrem会自动销毁,不需要通过finally{}进行手动销毁。
using (FileStream fs = new FileStream("test.txt", FileMode.Create))
{
//将字符串写入文件
fs.Write(bytesToWrite, 0, bytesToWrite.Length);
}
SQLServer
1.表关系
- 多对多关系(学生表——课程表——选课成绩表)
此方案中,一个学生可以有多门选课,一门课程也可以被多个学生选择,我们称之为多对多关系,在处理多对多关系的时候,我们需要建立一个中间关联表(选课成绩表),该关联表中需要有另外两张表的主键字段。
create table Course --课程
(
CourseId int primary key identity(1,1),--课程编号
CourseName varchar(30) not null, --课程名称
CourseContent text --课程介绍
)
create table Student --学生
(
StuId int primary key identity(1,1), --学生编号
StuName varchar(50) not null, --学生名字
StuSex char(2) not null --学生性别
)
insert into Student(StuName,StuSex) values('刘备','男')
insert into Student(StuName,StuSex) values('关羽','男')
create Table Exam --考试信息表
(
ExamId int primary key identity(1,1), --选课成绩编号
StuId int not null, --学生编号
CourseId int not null, --课程编号
Score int not null, --考试分数
)
充电体验报告
汇集整理了拍的照片,阅读了优秀范文。