MVC学习之前必须掌握的c#基础知识

一.类自动属性

public class Person
{
//自动属性
public string Name { get; set; } private int _age; public int age {
get { return _age; }
set { _age = value; }
}
}

Name为类的自动属性,其实跟下面age的定义方法是一样的,只不过是微软自动帮你生成了字段。

二.隐式类型

static void Var()
{
var person = new Person(); var p = person;
}

1.var类型会被编译器根据初始值的类型自动推断出具体的类型。

2. var类型不能做参数。

3.无法将null赋值给var类型。

4.语句中只声明一次变量,声明后不能更改类型。

三、匿名类

static void W02AnmClass()
{
var d = new { name = "张三", age = };
var d2 = new { name = , age = "" };
var d3 = new { name = "张三", age = "", gender="男"};
}

1.匿名类本质上是编译器生成的一个泛型类。

2.当匿名类的参数个数一样的时候是共用一个泛型类。

3.当匿名类的参数个数不一样的时候是各自生成不同的泛型类。

4.匿名类初始化的时候一定要赋值。

四、默认值和命名参数

static void W03DefaultValue()
{
W0301();
W0301("李四");
W0301(age: );
}
static void W0301(string name="张三",int age=)
{
Person person = new Person();
person.Name = name;
person.Age = age;
}

1.当一个方法里面的参数有默认值的时候,可以直接调用方法不用传值,编译器会自动调用参数的值。

2.当方法有默认值时,如果调用的时候只传入第一个参数,那么编译器会把第二个参数设置为默认值。

3.如果需要给某一个参数赋值,书写的格式是 参数名:值。

五、对象/集合初始化器

static void W0401Object()
{
Person person = new Person() {
Name="张三",
Age=
};
}
static void W0402Object()
{
var personlist = new List<Person>() {
new Person() {Name="张三",Age= },
new Person() {Name="李四",Age= }
};
}
static void W0403Object()
{
Person[] arrperson = new Person[] {
new Person() {Name="张三",Age= }
};
}

1.对象/集合初始化器,可以在new一个对象或者集合的时候,直接在后面加{}里面对属性直接赋值或者直接new一个对象给集合。

六、匿名方法(匿名函数、匿名委托)

static bool Process(int p)
{
return p > ;
} static void W0401()
{
List<int> list = new List<int>() { , , , , , , , , };
//直接传入一个方法名称也可以不过这个方法名称的参数以及返回值类型要跟
//public delegate bool Predicate<in T>(T obj);一样
var nlist =list.FindAll(Process);
foreach (var item in nlist)
{
Console.WriteLine(item);
} Console.WriteLine("=================");
//匿名方法的写法:delegate(编写匿名方法的参数,参数有程序员自己定义){函数的方法体代码}
var nlist2 = list.FindAll(delegate (int p) { return p > ; });
foreach (var item in nlist2)
{
Console.WriteLine(item);
}
}

七、lambda表达式的推断以及书写方法

List<Person> persons = new List<Person>() {
new Person { Name="张三",Age=},
new Person { Name="李四",Age=},
new Person { Name="王五",Age=}
};
//使用匿名方法返回符合条件的数据。
var nlistperson= persons.FindAll(delegate (Person person) { return person.Age > && person.Name.Contains("李"); });
//lambda表达式的推断使用goto语句来替换匿名函数 =>
var nlistperson2 = persons.FindAll((Person person)=> { return person.Age > && person.Name.Contains("李"); }); /*
1、lambda表达式的推断使用goto语句来替换匿名函数 => 继续简化
2、当只有一个参数的时候可以省略()参数的括号,当返回值只有一句语句的时候可以省略return以及{}花括号
3、当有多个参数的时候需要加上(),当有多条语句的时候需要添加{}每个语句后面加分号;最后返回的语句要加return
*/
var nlistperson3 = persons.FindAll(person => person.Age > && person.Name.Contains("李")); var nlistperson4 = persons.FindAll(person => {
person.Age++;
return person.Age > && person.Name.Contains("李");
}); foreach (var item in nlistperson4)
{
Console.WriteLine("名称:{0};年龄:{1}",item.Name,item.Age);
}

八、扩展方法

/// <summary>
/// 1.扩展方法必须是一个静态方法
/// 2.静态方法必须放在静态类中
/// 3.扩展方法第一个参数必须是this开头,并且指定扩展方法是哪个类型上的
/// 4.扩展方法只能有指定的类型才能点出来
/// 5.扩展方法的this后面的参数不属于 方法的参数
/// 6.如果扩展方法跟实例方法同名,先调用实例方法
/// 7.子类可以调用父类的扩展方法
/// 8.接口上的扩展方法可以被实现类的对象直接使用
/// 9.扩展方法的本质,最终还是被编译器编译成了 静态类.静态方法()
/// </summary>
static void W0601()
{
DateTime dt = DateTime.Now;
string fmtstr= dt.FmtDate();
}
public static class ExtHelper
{
public static string FmtDate(this DateTime dt)
{
return dt.ToString("YYYY-MM-DD HH:MM:ss");
}
public static string FmtDate(this DateTime dt,string str)
{
return dt.ToString("YYYY-MM-DD HH:MM:ss"+str);
}
}

九、系统内置的委托

#region 系统内置委托
#region Action委托 接收参数 无法回值
static void W0701Action()
{
List<int> list = new List<int>() { , , , , , }; list.ForEach(i => Console.WriteLine(i));
}
#endregion #region Predicate 泛型委托:接收一个参数,返回bool类型
static void W0702Predicate()
{
var list = new List<Person>(){
new Person { Name = "张三", Age = },
new Person { Name = "李四", Age = },
new Person { Name = "王五", Age = }
}; var nlist = list.FindAll(c => c.Age > );
//获取当前list集合中,名字为张三的对象,如果有多个只返回第一个 var person = list.Find(c => c.Name == "张三");
}
#endregion #region Func:接收参数,返回参数,但是不固定
static void W0703Func()
{
var list = new List<Person>(){
new Person { Name = "张三", Age = },
new Person { Name = "李四", Age = },
new Person { Name = "王五", Age = }
}; var nlist = list.Where(c => c.Age > );
var nlist1 = nlist.ToList();
nlist1.ForEach(c => Console.WriteLine(c.Name.ToString()));
}
#endregion #region System.Comparison<T> 返回一个整数,接收两个同类型的参数
static void W0704Comparison()
{
var list = new List<Person>(){
new Person { Name = "张三", Age = },
new Person { Name = "李四", Age = },
new Person { Name = "王五", Age = }
}; list.Sort((p, n) =>p.Age - n.Age);
list.ForEach(c=>Console.WriteLine(c.Name.ToString()+":"+c.Age.ToString()));
} #endregion
#endregion

十、SQO方法 -标准查询运算符

创建两个类

public class Person
{
public int TypeID { get; set; } public int ID { get; set; }
//自动属性
public string Name { get; set; } private int _age; public int Age {
get { return _age; }
set { _age = value; }
} public override string ToString()
{
return "ID=" + this.ID + "名称=" + this.Name + ",年龄=" + this.Age + "所属类别=" + this.TypeID;
}
} public class PsersonType
{
public int TypeID { get; set; }
public string TName { get; set; }
}

SQO常用方法的使用 查询、排序、关联、分组等

#region SQO方法 -标准查询运算符
#region 1 where() firstordefult() LastOrDefault方法进行查找操作 (链式编程)
static void W0801()
{
var list = new List<Person>(){
new Person { Name = "张三", Age = },
new Person { Name = "李四", Age = },
new Person { Name = "王五", Age = }
}; //利用where查找出list中年龄大于22或者名称叫王五
//链式编程
list.Where(c => c.Age > || c.Name == "王五").ToList().ForEach(c => Console.WriteLine(c.ToString())); //firstordefult()的演示
var person= list.FirstOrDefault(c => c.Age > || c.Name == "王五");
Console.WriteLine(person.ToString()); //获取集合中满足条件的最后一个元素
var person2 = list.LastOrDefault(c => c.Age > || c.Name == "王五");
Console.WriteLine(person.ToString()); }
#endregion #region 2 对集合进行排序(正序和倒序)
static void W0802()
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
};
//正序
list.OrderBy(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));
Console.WriteLine("---------");
//倒序
list.OrderByDescending(c => c.Age).ToList().ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region 3 根据多个字段的组合排序
static void W0803()
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
};
//多个条件进行正序 先按照年龄然后按照ID正序
list.OrderBy(c => c.Age).ThenBy(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString())); //多条件倒序
list.OrderByDescending(c => c.Age).ThenByDescending(c => c.ID).ToList().ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region 4 投影方法(Select) ( 重点 )
static void W0804()
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
};
//取出list集合里面的部分字段
List<string> nlist = list.Select(c => c.Name).ToList(); //重新创建一个新的list集合只包含name和age
list.Select(c => new { N = c.Name, A = c.Age }).ToList().ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region 5 分页方法 Skip(skipNum).Take(页容量) Skip():表示跳过集合中的前面多少行
static void W0805()
{
int rowcount = ;
W0805ByPage(, , out rowcount).ForEach(c => Console.WriteLine(c.ToString()));
}
static List<Person> W0805ByPage(int pageindex, int pagesize, out int rowcount)
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
};
// 给rowcount赋予满足条件的数据总行数
rowcount = list.Count();
//经过第几页跳过跳过多少条
int skipCount = (pageindex - ) * pagesize;
return list.Where(c => c.Age > ).Skip(skipCount).Take(pagesize).ToList();
}
#endregion #region 6 连表查询Join
static void W0806()
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
}; var typelist = new List<PsersonType>()
{
new PsersonType(){TypeID=,TName="老师"},
new PsersonType(){TypeID=,TName="学生"},
new PsersonType(){ TypeID=, TName="保安"}
}; //利用SQO方法Join() 来实现上述业务逻辑
var nlist = list.Join(typelist, p => p.TypeID, c => c.TypeID, (p, c) =>new { p.Name,p.Age,c.TName }).ToList(); nlist.ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region 7 分组 GroupBy()
static void W0807()
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
}; //利用SQO方法进行分组操作
list.GroupBy(c => c.TypeID).ToList().ForEach(c => {
Console.WriteLine("----分组号{0}" + c.Key,c.ToList().Count());
c.ToList().ForEach(g => Console.WriteLine(g.ToString()));
});
}
#endregion
#endregion

十一、linq的常用方法

#region  Linq使用方法
#region 1 Linq实现排序
static void w0901()
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
};
//需求:根据list集合中的age倒序排列后取出pig对象中的Name和Age
//ascending :正序 descending:倒序
var orderbyList = (from c in list
orderby c.Age descending
select new { c.Name, c.Age }).ToList();
orderbyList.ForEach(c => Console.WriteLine(c.ToString()));
}
#endregion #region 2 LinqJoin实现集合的链接查询
static void W0902()
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
}; var typelist = new List<PsersonType>()
{
new PsersonType(){TypeID=,TName="老师"},
new PsersonType(){TypeID=,TName="学生"},
new PsersonType(){ TypeID=, TName="保安"}
}; var nlist = (from c in list
join t in typelist
on c.TypeID equals t.TypeID
select new { c.Name, c.ID, t.TName }).ToString(); }
#endregion #region Linq分组
static void W0903()
{
var list = new List<Person>(){
new Person {ID=, Name = "张三", Age = ,TypeID= },
new Person {ID=,Name = "李四", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=},
new Person {ID=,Name = "王五", Age = ,TypeID=}
}; var groupbylist = (from c in list
group c by c.TypeID).ToList(); groupbylist.ForEach(c =>
{
Console.WriteLine("-----分组号=" + c.Key);
c.ToList().ForEach(g => Console.WriteLine(g.ToString()));
}); }
#endregion
#endregion

MVC(基础一)的更多相关文章

  1. Spring MVC基础

    1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是一样的方法.框架只能在技术层 ...

  2. Spring MVC 基础

    Spring MVC 基础 1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是 ...

  3. ASP.NET MVC基础学习

    ASP.NET MVC基础学习 传统的MVC概念 模型:组类,描述了要处理的数据以及修改和操作数据的业务规则 视图:定义应用程序用户界面的显示方式 控制器:一组类,用来处理来自用户,整个应用程序流以及 ...

  4. Java Web系列:Spring MVC基础

    1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是一样的方法.框架只能在技术层 ...

  5. 重温MVC基础入门

    重温MVC基础入门   简介 本文主要是作者回顾MVC基础的文章,整合个人认为基础且重点的信息,通过简单实践进行复习. 相关代码地址:https://github.com/OtherRuan/Revi ...

  6. MVC基础操作

    C#-MVC基础操作-数据的展示及增删改.登录页面及状态保持一.数据展示1.View代码: <%@Page Language="C#" Inherits="Syst ...

  7. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  8. MVC 基础和增删改、登录

    一.什么是MVC?1.了解MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:       Model(模型)表示应用程序核心 ...

  9. MVC基础(很基础很基础~~~)

    最近工作比较不忙,准备学习一些东西,作为一个菜鸟,不断学习新东西(我不会的东西)充实自己真的很重要,所以整理一下基础的mvc知识,以备不时之需.呵呵~~ 首先感谢原文作者:QLeelulu的文章htt ...

  10. Spring MVC基础知识整理➣环境搭建和Hello World

    概述 Spring MVC属于SpringFrameWork的产品,采用Model-View-Controller进行数据交互,已经融合在Spring Web Flow里面.Spring 框架提供了构 ...

随机推荐

  1. Java 添加超链接到Word文档

    对特定元素添加超链接后,用户可以通过点击被链接的元素来激活这些链接,通常在被链接的元素下带有下划线或者以不同的颜色显示来进行区分.按照使用对象的不同,链接可以分为文本超链接,图像超链接,E-mail链 ...

  2. Spring Boot2解决idea console 控制台输出乱码

    Idea默认配置是采用GBK, 而项目工程文件采用的是UTF-8. 编码不一致,导致idea Console控制台输出乱码. 网上的解决方案,大都是直接修改Settings=>Editor=&g ...

  3. Selenium环境要配置浏览器驱动

    1.浏览器环境变量添加到path 2.将浏览器相应的驱动.exe复制到浏览器目录 3.这条就是让我傻逼似的配置一上午的罪魁祸首:将驱动.exe复制到python目录!!!! Selenium

  4. 欢迎大家Follow me!微软MVP罗勇(Dynamics CRM方向2015-2018年)欢迎您!

    我是一名八零后,来自湖南乡村,2006年毕业于大连大学工商管理专业,主要靠自学走上了编程之路.从2012年开始接触Dynamics CRM 2011,一直从事Dynamics CRM方面工作,熟悉Dy ...

  5. 嵌入Canvas App到Dynamics 365 Customer Engagement(Model-Driven App)中,创造更多可能!

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  6. Android框架式编程之ViewModel

    一.ViewModel介绍 ViewModel类是被设计用来以可感知生命周期的方式存储和管理 UI 相关数据.ViewModel中数据会一直存活即使 Activity Configuration发生变 ...

  7. VUE添加网站favicon.ico图标

    1.修改webpack.dev.conf文件   webpack.prod.conf文件 new HtmlWebpackPlugin({ filename: 'index.html', templat ...

  8. Java8特性Lambda表达式

    Lambda 表达式 简介: Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). (parame ...

  9. Linux防火墙常用命令

    Centos7 查看防火墙状态 sudo firewall-cmd --state 输出running则表示防火墙开启,反之则是关闭,也可以使用下面命令进行查询 sudo systemctl stat ...

  10. [算法模板]FFT-快速傅里叶变换

    [算法模板]FFT-快速傅里叶变换 感谢ZYW聚聚为我们讲解FFT~ 思路 我懒,思路和证明部分直接贴链接: rvalue LSJ-FFT与NTT基础 代码 主要思想是利用了单位根特殊的性质(n次单位 ...