扩展方法以及LinQ的学习
我们今天学习的内容其实还是蛮多的,学习了自动属性,扩展方法,复习初始化器,以及LinQ的一些方法,其实感觉有些还是很熟悉的,在前面的学习过程中有时间感觉学习的知识知道了怎么使用,但是还没有在项目中使用,做的习题似乎意义不大,现在依旧如此,感觉仅限于知道怎样使用。很想做一个小小的项目来熟悉下学习的知识。。。下面就总结下今天学习的内容。
一.自动属性
private int productid;
public int Productid
{
get { return productid; }
set { productid = value; }
}
public string Name { set; get; }
private decimal price;
public decimal Price { set; get; }
自动属性可以避免我们手动声明一个私有成员变量以及get和set的逻辑,快速写一个类,这样更加的方便。
二.初始化的对比
public class Product
{
public int ProductId { set; get; }
public string Name { set; get; }
public string Decription { set; get; }
public decimal Price { set; get; }
public string Category { set; get; }
}
class Program
{
static void Main(string[] args)
{
Product p = new Product(); //初始化对象
p.ProductId = ;
p.Name = "张三"; Product pp = new Product() { ProductId = , Name = "李四" }; //对象初始化器 List<string> lists = new List<string>() { "张三", "李四", "王五" }; //集合初始化器 List<Product> list = new List<Product> { new Product() { ProductId = , Name = "王五" },new Product{ProductId=,Name="赵六"} };
foreach (var item in list) //匿名方法
{
Console.WriteLine(item);
} Console.ReadKey();
}
}
学习了匿名类型,我们还是要区分一下我们和前面学习的,之前学习了初始化对象,就是方便了传参,直接使用对象调用类的属性定义参数的值;而对象初始化器和集合初始化器就是我们如上所示,其实是更加方便的给属性赋值;在这里主要是一个新的知识,就是匿名类型,其实和匿名方法一样,就是没有名字,然后通过new实例化,再赋值,这样的方式就是你匿名类型。刚开始接触这个其实还是在我们学会了对象初始化器和集合初始化器这样理解起来更加容易些。
三.简单的扩展方法
class Program
{
static void Main(string[] args)
{
string str = "AbcD";
Console.WriteLine(str.ToCamer());
Console.WriteLine(str.ToPascal());
Console.Read();
}
}
public static class Stringstr
{
public static string ToCamer(this string s)
{
string first = s[].ToString().ToLower();
string last = s.Substring().ToLower();
return first + last;
}
public static string ToPascal(this string s)
{
string first = s[].ToString().ToUpper();
string last = s.Substring().ToLower();
return first + last;
}
}
//where的使用
static void Main(string[] args)
{
string[] array = { "旋转音乐盒", "好挤好挤", "爱的多米诺", "客官不可以", "下雨天", "晴天娃娃", "日不落", "黑发尤物" };
Func<string, bool> func = i => i.Length < ; //集合中的字符串的长度小于5
IEnumerable<string> wherelist = array.Where<string>(func);
foreach (string item in wherelist)
{
Console.WriteLine(item);
} Func<string, bool> f = i => i.Contains("黑"); //集合中的字符串包含“黑”的项
IEnumerable<string> wherelists = array.Where<string>(f);
foreach (var item in wherelists)
{
Console.WriteLine(item);
} Func<string,int,bool> fun = (p, i) => (i % == ); //在这里i这个参数是根据集合的索引,然后输出索引为质数的系列中的字符串
IEnumerable<string> wherelistss = array.Where<string>(fun);
foreach (var item in wherelistss)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
上面主要举例说明了where的使用方法,它的输出类型是bool类型,而在这里Lambda表达式也使用了方法.length(字符串或者数组的长度),和contains()方法,而contains方法的参数则是判断是否包含该项。在使用where方法应该注意的是输出类型,因为在这里很容易会以输入的类型string作为输出的类型,它启示作用就是根据条件筛选输出想要的结果。
//select的使用
static void Main(string[] args)
{
string[] array = { "旋转音乐盒", "好挤好挤", "爱的多米诺", "客官不可以", "下雨天", "晴天娃娃", "日不落", "黑发尤物" };
Func<string, int> func = i => i.Length; //输出集合中的每一项的长度
IEnumerable<int> selectlist = array.Select<string,int>(func); //在这里需要注意的是select<>的参数类型限制为输入的类型和输入的参数类型
foreach (var item in selectlist)
{
Console.WriteLine(item);
} var selects = array.Select(p=>new{p,p.Length}); //在这里使用匿名方法,输入集合中各字符串的长度
foreach (var item in selects)
{
Console.WriteLine(item);
} var selectss = array.Select(p => new {name = p, p.Length });
foreach (var item in selectss)
{
Console.WriteLine("歌曲名字是:{0},歌名的长度是:{1}", item.name,item.Length);
}
Console.ReadKey();
}
//selectmany的使用
static void Main(string[] args)
{
string[] array = {"旋转音乐盒","淋雨一直走","好挤好挤","爱的多米诺","客官不可以","下雨天","晴天娃娃","日不落","黑发尤物"}; IEnumerable<char> chars = array.SelectMany(p=>p.ToArray());
foreach (var item in chars) //SelectMany这个方法传入一个序列,可以输出多个
{
Console.WriteLine(item);
}
Console.ReadKey();
}
使用select方法,输出的类型可以为int类型,在这里也可以使用匿名方法,这样使用更简单的输出集合的每一项。而selectMany方法则可以转变为数组,然后遍历出每一项。在这里可以存在类型转换,还有就是在使用匿名方法时间返回一个var类型,而它是一个强类型,在编译时间自动给我们生成它能够辨别出的类型。
static void Main(string[] args)
{
string[] array = { "旋转音乐盒", "淋雨一直走", "好挤好挤", "爱的多米诺", "客官不可以", "下雨天", "晴天娃娃", "日不落", "黑发尤物" };
//IEnumerable<string> arraylist = array.Take(5); //输出集合中的前五项
//foreach (var item in arraylist)
//{
// Console.WriteLine(item);
//} IEnumerable<string> arraylists = array.TakeWhile(p => p.Length > );
foreach (var item in arraylists)
{
Console.WriteLine(item);
} //IEnumerable<string> skiplist = array.Skip(4); //略过前四项,输出后面的每一项
//foreach (var item in skiplist)
//{
// Console.WriteLine(item);
//} //IEnumerable<string> skiplists = array.SkipWhile(s=>s.StartsWith("下"));
//foreach (var item in skiplists)
//{
// Console.WriteLine(item);
//}
Console.ReadKey();
}
这里简单的写了take与skip两个方法以及的TakeWhile和SkipWhile方法,而take是返回前几条数据,skip是跳过几条数据输出后面的数据。
static void Main(string[] args)
{
string[] array = { "旋转音乐盒", "淋雨一直走", "好挤好挤", "爱的多米诺", "客官不可以", "下雨天", "晴天娃娃", "日不落", "黑发尤物" };
IEnumerable<string> takelist= array.Take();
IEnumerable<string> skiplist = array.Skip();
IEnumerable<string> concatlist = takelist.Concat(skiplist); //Concat方法可以使两个序列合并为一个序列
foreach (var item in concatlist)
{
Console.WriteLine(item);
} IEnumerable<string> orderbylist = array.OrderBy(p => p.Length); //OrderBy方法是用来排序的,在这里是根据字符串的长度排序
foreach (var item in orderbylist)
{
Console.WriteLine(item);
}
IEnumerable<string> orderbylistss = array.OrderByDescending(p=>p.Length).ThenBy(s=>s);
foreach (var item in orderbylistss) //OrderByDescending方法是可以根绝多个条件排序,在这里是根据俄字符串长度排序,如果长度相等,可以再根据字母的顺序排序
{
Console.WriteLine(item);
}
Console.ReadKey();
}
上面已经添加了注释,嘿嘿,今天学习的知识点还是可以理解的,但是在使用让面还是很陌生的,主要是使用LinQ中的一些方法,感觉使用起来还是有点困难的,这个需要做些练习的,我会好好的练习,就写到这里,明天继续努力orm框架。
扩展方法以及LinQ的学习的更多相关文章
- net2.0实现net3.5特性,如扩展方法,Linq等
差不多两年没碰net了,今天想做个小工具,于是打开了久违的VS2012,由于客户终端还是winxp时代,而且是net2.0,且升级存在限制,因此必需在2.0下开发,之前的常用库是3.5写的,而且因为3 ...
- Linq之扩展方法
目录 写在前面 系列文章 扩展方法 总结 写在前面 上篇文章介绍了隐式类型,自动属性,初始化器,匿名类的相关概念,及通过反编译的方式查看了编译器帮我们做了那些事.本篇文章将介绍扩展方法的知识点,及如何 ...
- C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询
1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法 ...
- C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...
- 几种查询方法(lambda Linq Enumerable静态类方式)
1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { ...
- List扩展方法汇总(仅备注)
不管在c/s还是b/s的c#语言开发程序中,经常会用到List的扩展方法,尤其在json格式的数据和服务端交互越来越流行,很多时候总是在开发使用到的时候才去搜索有些扩展方法或者linq的用法,在这里, ...
- C#中的扩展方法详解
“扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.”这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类 ...
- 关于.NET中迭代器的实现以及集合扩展方法的理解
在C#中所有的数据结构类型都实现IEnumerable或IEnumerable<T>接口(实现迭代器模式),可以实现对集合遍历(集合元素顺序访问).换句话可以这么说,只要实现上面这两个接口 ...
- C#中的扩展方法
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 以上是msdn官网对扩展方 ...
随机推荐
- Linux 安装 Oracle 11g R2
一.安装环境 Linux服务器:Centos 6.4 64位 Oracle服务器:Oracle11gR2 64位 二.系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的 ...
- SpringBoot系列四:SpringBoot开发(改变环境属性、读取资源文件、Bean 配置、模版渲染、profile 配置)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念 SpringBoot 开发深入 2.具体内容 在之前已经基本上了解了整个 SpringBoot 运行机制,但是也需要清 ...
- Spring JDBC删除数据
以下示例将展示如何使用Spring jdbc执行删除数据库表中的记录,这里演示如何删除指定student表中的记录. 语法: String deleteQuery = "delete fro ...
- C#提高--------------获取方法返回值的自定义特性(Attribute)
.NET(C#):获取方法返回值的自定义特性(Attribute) 转载 2013年05月08日 10:54:42 1456 来自:http://www.cnblogs.com/mgen/archiv ...
- 嵌入式开发之视频压缩比---h264、mjpeg、mpeg4
mjpeg:以hi3519 100v的编码性能,压缩比在20~80,平均1/50 http://blog.csdn.net/mengxihe29/article/details/52584544 ht ...
- php -- 取整数
PHP取整数函数常用的四种方法,下面收集了四个函数: 经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已--主要是:ceil,floor,round,intval ceil — 进一 ...
- Java多线程——Lock&Condition
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. package ...
- 史上最全的 Sublime Text 汉化、插件安装合集
0.前言 本文用于给新手小白用户指明前进方向.不用做商业推广. 其次,鼓舞购买正版.拒绝盗版. 好了.口号喊完,接下来就直接開始正文. 1. Sublime Text 介绍 首先在開始前,先来介绍一下 ...
- DWZ主从表界面唯一性验证(自写js)(一)
最近在项目中遇到一个问题,它的需求是: 利用DWZ的主从表结构批量添加课程信息,需要在触发课程代码文本框的离开事件时验证: 1.是否选择学院. 2.数据库里是否已存在该课程代码. 3.多条数据添加时, ...
- Objective-C语法之字符串NSString去掉前后空格或回车符(可以是NSCharacterSet类型的其它字符)
main.m #import <Foundation/Foundation.h> #import "NSString+Trim.h" int main(int argc ...