C#30新特性.docx
- 文档编号:7889204
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:10
- 大小:19.67KB
C#30新特性.docx
《C#30新特性.docx》由会员分享,可在线阅读,更多相关《C#30新特性.docx(10页珍藏版)》请在冰豆网上搜索。
C#30新特性
C#3.0新增功能介绍(上)
c#.net2010-09-1223:
59:
35阅读3评论0 字号:
大中小 订阅
//C#3.0新增功能介绍(上) msdn教程~~
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
//隐式类型的本地变量和数组
//对象初始值设定项
//集合初始值设定项
//自动实现的属性
//匿名类型
//------------//
//
//
//局部变量可以用var声明
//var关键字指示编译器根据初始化语句右侧表达式推断变量的类型
//推断类型可以是内置类型、匿名类型、用户定义类型、.net
vari=5;
vars="Hello";
vara=new[]{0,11,22};
//anoniscompiledasananonymoustype匿名类型
varanon=new{Name="Terry",Age=33};匿名类型
//listiscompiledasList
varlist=newList
Console.WriteLine(i.GetType().ToString());
Console.WriteLine(s.GetType().ToString());
//expriscompiledasIEnumerable
//varexpr=fromcinCustomers
// wherec.City=="London"
// selectc;
//隐式类型的数组
//没有再初始化语句左侧对隐式类型的数组使用方括号
vararr1=new[]{1,10,100,1000};//int[]
vararr2=new[]{"aa",null,"world"};//string[]
//交错数组就像一维数组那样使用new[]进行初始化
//不支持隐式类型的多维数组
//好用不一定要多用
vararr3=new[]
{
new[]{1,3,4,5},
new[]{2,5,6,8}
};
vard=new[]
{
new[]{"afsd","sdfsf","dsfsf"},
new[]{"aaaaa","sdf"}
};
//隐式类型的本地变量和数组
//var关键字并不意味着“变体”,也不表示该变量是松散类型化变量或后期绑定变量。
它只是表示由编译器确定和分配最适当的类型
//var关键字可以在以下4种场合使用
//1.局部变量
//2..在for初始化语句中for(varx=1;x<10;x++)
//3.在foreach初始化语句中foreach(variteminlist){...}
//4.在using语句中(销毁变量体)
//using(varfile=newStreamReader("C:
\\myfile.txt"){...})
/*
*1.很多时候var是可以省略的
*2.但在使用匿名类型初始化变量时,必须使用它
*3。
由于只有编译器知道匿名类型的名称,因此必须在源代码中使用var
*4。
如果已经使用var初始化了查询变量,则还必须使用var作为对查询变量进行循环访问的foreach语句中迭代变量的类型
*
*/
//var与匿名类型
string[]words={"aPPle","BlueBeRry","cHeRry"};
varupperLowerWords=
fromwinwords
selectnew{Upper=w.ToUpper(),Lower=w.ToLower()};
foreach(varulinupperLowerWords)
{
Console.WriteLine("Uppercase:
{0},Lowercase:
{1}",ul.Upper,ul.Lower);
}
//C#3.0新功能
//对象初始值设定项
//使用对象初始化值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显示调用构造函数
//Objectinitializer
Catcat=newCat{Age=10,Name="Sylvester"};
//将对象初始化值设定项用于匿名类型
//查询表达式经常使用匿名类型,而这些类型只能使用对象初始化值设定项进行初始化
//varproductinfos=
// frompinproducts
// selectnew{p.ProductName,p.UnitPrice};
//创建匿名类型时重命名字段
//selectnew{p.ProductName,Price=p.UnitPrice};
//集合初始值设定项
//1.使用集合初始值设定项可以在初始化一个实现了IEnumerable的集合类时指定一个或多个元素初始值设定项
//2。
元素初始值设定项可以是简单的值,也可以是表达式或对象初始值设定项
//3.通过使用集合初始值设定项,无需在源代码中指定多个对该类的Add方法的调用;编译器会添加这些调用。
List
// List
//下面的结合初始值设定项使用对象初始值设定项来初始化在前面的一个示例中定义的Cat类的对戏那个。
//各个对象初始值设定项被分别括在大括号中,并且用逗号分隔。
List
{
newCat(){Name="KAka",Age=8},
newCat(){Name="Whisker",Age=28},
newCat(){Name="Sasha",Age=18}
};
//如果集合的Add方法允许,可以将null指定为集合初始值设定项中的一个元素
List
{
newCat(){Name="Furry",Age=5},
newCat(){Name="Peaches",Age=4},
null
};
varpeople=newList
{
newPerson{FirstName="kaka",LastName="zla",Age=18},
newPerson{FirstName="dada",LastName="oa",Age=1}
};
//匿名类型
varpResult=
frompinpeople
selectnew{p.FirstName,p.LastName,p.Age};
//字段重命名
varpResult2=
frompinpeople
selectnew{NewFirstName=p.FirstName,p.LastName,p.Age};
//自动实现的属性
//当属性访问器中不需要其他逻辑时,自动实现的属性可使属性声明变得更加简洁
//自动实现的属性必须同时声明get和set访问器。
若要创建readonly自动实现属性,请给予它privateset访问器。
//自动实现属性(Property)不允许具有属性(Attribute)。
//如果必须在属性(Property)的后备字段上使用属性(Attribute),则应该只创建常规属性(Property)
//匿名类型
//匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显示定义一个类型。
//类型名由编译器生成,并且不能在源代码级使用。
//这些属性的类型由编译器推断
varv=new{Amount=111,Message="Hello"};
//匿名类型通常用在查询表达式的select子句中,以便返回源序列中每个对象的属性子集。
//匿名类型是使用new运算符和对象初始值设定项创建的
//【匿名类型】是由一个或多个公共只读属性组成的【类类型】。
不允许包含其他种类的类成员(如方法或事件)
//var不是一个类型,它只是一个关键字
varproductQuery=
fromprodinproducts
selectnew{prod.Color,prod.Price};
//将匿名类型分配给变量时,必须使用var构造初始化该变量。
//这是因为只有编译器能够访问匿名类型的基础名称
foreach(varvinproductQuery)
{
Console.WriteLine("Color={0},Price={1}",v.Color,v.Price);
}
//匿名类型直接从对象派生的引用类型。
尽管应用程序无法访问匿名类型,但编译器仍会为其提供一个名称。
//如果两个或更多个匿名类型一相同的顺序具有相同数量和种类的属性,则编译器会讲这些匿名类型视为相同类型,
//并且它们共享编译器生成的相同类型信息。
//匿名类型具有方法范围
//匿名类型不能像属性一样包含不安全类型。
//由于匿名类型上的Equals和GetHashCode方法是根据属性的Equals和GetHashCode定义的,
//因此仅当同一匿名类型的两个实例的所有属性都相等时,这两个实例才相等。
}
}
publicclassCat
{
//Auto-implementedproperties
publicintAge{get;set;}
publicstringName{get;set;}
}
publicclassPerson
{
publicstringFirstName{get;set;}
publicstringLastName{get;set;}
publicintAge{get;set;}
publicstringBirthDate{get;privateset;}
publicstringFullName{get;privateset;}
}
}
】
Linq语言集成查询入门0912
c#.net2010-09-1223:
51:
35阅读2评论0 字号:
大中小 订阅
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceConsoleApp
{
classProgram
{
publicstaticboolIsEven(intn)
{
return(n%2==0);
}
staticvoidMain(string[]args)
{
//thethreepartsofaLinqQuery
//1.datasource 获取数据源
int[]numbers=newint[8]{1,3,33,4,7,9,8,22};
//2.querycreation创建查询
//numqueryisanIEnumerable
varnumquery=
fromnuminnumbers
wherenum>=9
selectnum;
//3.queryexecution执行查询
foreach(intnuminnumquery)
{
System.Console.WriteLine("{0}",num);
}
//在linq中,查询的执行和查询本身截然不同;换句话说,如果只是创建查询变量,则不会检索任何数据
//查询指定要从数据源中检索的信息
//查询可以指定在返回这些信息之前,如何对其进行排序、分组和结构化
//查询存储在查询变量中,查询变量本身只是存储查询命令。
//实际查询执行会延迟到在foreach语句中循环访问查询变量是发生。
“延迟执行”
//强制立即执行。
执行聚合函数(Count,Max,Average,First);调用ToList()或ToArray()缓存结果
//List
vardoquery=
(fromninnumbers
wheren%2==0
//whereIsEven(n)
selectn).ToArray();
System.Console.WriteLine("奇数:
{0}....",doquery.Count());
//数据源
List
{
newEmployer{Name="kaka",Scores=newList
newEmployer{Name="哈德斯",Scores=newList
newEmployer{Name="酷酷",Scores=newList
};
//复合查询
varqueryE=
fromeinemployee
fromscoreine.Scores
wherescore>=4
selectnew{Nike=e.Name,score};
//executethequeries
foreach(vareinqueryE)
{
System.Console.WriteLine("小名:
{0},高分:
{1}",e.Nike,e.score);
}
//keeptheconsolewindowopenindebugmode.
Console.WriteLine("Pressanykeytoexit.");
//交错查询
char[]upperCase={'A','B','C','D'};
char[]lowerCase={'a','b','c','d'};
varjoinQuery1=
fromupperinupperCase
fromlowerinlowerCase
selectnew{upper,lower};
foreach(varjoin1injoinQuery1)
{
System.Console.WriteLine("joinQuery1:
{0}ismatchedto {1}",join1.lower,join1.upper);
}
System.Console.WriteLine("----------------------------------");
varjoinQuery2=
fromlowerinlowerCase
wherelower!
='a'
fromupperinupperCase
whereupper!
='B'
selectnew{lower,upper};
foreach(varjoin2injoinQuery2)
{
System.Console.WriteLine("joinQuery2:
{0}ismatchedto{1}",join2.lower,join2.upper);
}
System.Console.WriteLine("----------------------------------");
varjoinQuery3=
fromlowerinlowerCase
wherelower!
='a'
fromupperinupperCase
selectnew{lower,upper};
foreach(varjoin3injoinQuery3)
{
System.Console.WriteLine("joinQuery3:
{0}ismatchedto{1}",join3.lower,join3.upper);
}
string[]strings=
{
"icaught coldtoday itemployeetragedy",
"Thepenmightierthantheeyeword",
"Apennysaved isapennyearned"
};
varstrq=
fromsentenceinstrings
letwords=sentence.Split('')//创建一个可用查询自身的可枚举类型
fromwordinwords
letw=word.ToLower()//使查询只能对范围变量word调用一次ToLower.
wherew[0]=='a'||w[0]=='e'||w[0]=='i'||w[0]=='o'||w[0]=='u'
selectword;
//分组查询
System.Console.WriteLine("----------------------------------");
string[]manywords={"fuck","catch","cold","see","you","around","china"};
varwordGroups=
fromwinmanywords
groupwbyw[0];
foreach(varwordGroupinwordGroups)
{
Console.WriteLine("wordthatstartwiththeletters{0}",wordGroup.Key);
foreach(varwordinwordGroup)
{
Console.WriteLine("{0}",word);
}
}
//连接查询
//使用join自居可用将来自不同原序列并且在对象模型中没有直接关系的元素相关联
//唯一的要求就是每个源中的元素需要共享某个可以进行比较以判断是否相等的值
//join子句使用特殊的equals关键字比较指定的键是否相等
//三种常见的联接类型:
内部联接,分组联接,左外部联接
//内部联接
//varinnerjoinQuery=
// fromcategoryincategories
// joinprodinproductsonCategory.IDequalsprod.CategoryID
// selectnew{ProductName=prod.Name,Category=category.Name};
//分组联接
//varinnerGroupJoinQuery=
// fromcategoryincategories
// joinprodinproductsoncategory.IDequalsprod.categoryIDinto
// ProdGroup
// selectnew{CategoryName=category.Name,Products=ProdGroup};
}
}
//publicclassEmployer
//{
// publicstringName{get;set;}
// publicList
// internalvoidFire()
// {
// thrownewNotImplementedException();
// }
//}
}
//隐式类型的本地变量和数组
//对象初始值设定项
//集合初始值设定项
//自动实现的属性
//匿名类型
//扩展方法
//分部方法定义?
//Lambda表达式
//查询关键字(下一堂课内容)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 30 特性
![提示](https://static.bdocx.com/images/bang_tan.gif)