2021-09-27学习总结

当天计划

  1. 学习C#迭代器、LINQ,解决昨天的报错问题(已学习)
  2. 学习SQLServer数据库设计(已学习三范式、表关系)、T-SQL、运算符、流程控制、子查询。
  3. 完成充电体验报告(照片整理、范文阅读)

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的用法

  1. 在文件顶部引用命名空间,如:using System;
  2. 为命名空间或类型定义别名;
      这种做法有个好处就是当同一个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();
  1. 定义一个范围,在范围结束时处理对象。
      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.表关系

  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, --考试分数
)

充电体验报告

汇集整理了拍的照片,阅读了优秀范文。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,109评论 2 89
  • LINQ(Language Integrated Query,语言集成查询)提供了类似于SQL的语法,能对集合进行...
    编程小世界阅读 1,852评论 0 0
  • 一、Unity简介 1. Unity界面 Shift + Space : 放大界面 Scene界面按钮渲染模式2D...
    MYves阅读 12,658评论 0 22
  • 作者:Shocker 链接:https://shockerli.net/post/1000-line-mysql-...
    催化剂阅读 1,891评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,718评论 28 53