自从大二学习了C#这门编程语言,到目前为止,要说自己对哪个地方最为深刻与赞叹,我觉得当然要数:①C#组件技术(.NET基本组件、.NET组件、用户定制控件);②语言集成查询LINQ。前者让我们的编程变得简单——不管是站在巨人的肩膀上还是站在自己的肩膀上!后者让我们对于对于集合对象有了很优质的操作,由其对于我们这种工科学生编程来说。这次,出于学习总结的角度,写下一些关于LINQ的学习笔记。
匿名方法即是“没有名称”的方法,它是出于为委托或者事件提供简化绑定方法的目的的。因此,在方法本身代码较少易于管理的情况下,使用匿名方法就不必去定义事件订阅者类了。
class EventSender
{
delegate void SomeDelegate(string mgs);
static void Main()
{
SomeDelegate obj=delegate(string mgs)
{
Console.WriteLine("mgs");
}
obj("委托调用匿名方法");
}
}
lambda表达式是对匿名方法的简化,任何匿名方法使用的场合lambda表达式都可以替代,并且代码更加简洁。lambda表达式会广泛用于LINQ中。lambda表达式的形式如下:
*①无参的:()=>{处理语句};
②一个参数的:参数=>{处理语句};
③多个参数的:(参数1,参数2,…参数n)=>{处理语句}。
备注:一条处理语句,{}可以省略!
`*“
某匿名方法:
SomeDelegate obj=delegate(string mgs)
{
Console.WriterLine("mgs");
}
其对应的lambda表达式:
SomeDelegate obj=mgs=>Console.WriterLine("mgs");
①方法语法:扩展方法+lambda表达式;
②声明式的查询语法类似于SQL查询方式。
PS:什么是扩展方法?扩展方法就是向现有的类型添加一些方法,使得该类型在功能上有所扩展!扩展方法可以简化以继承实现的方法扩展,并且在不知道原有基类的内部构造时,将十分有利。
a.方法语法(传输链):
IEnumerablquery=源集合.Where(过滤,必须bool表达式).OrderBy(排序条件).Select(选择条件)
b.查询表达式:
var 结果集=from n in 数据源
where 过滤表达式
orderby 排序
select 投影(选择)
查询表达式需以select或者group结束!
①返回list<>或者数组元素个数,以便循环:.Count/.Count();
for (int j = 0; j < TextData.Count; j++)
{
if (TextData[j].Trim().ToCharArray().Count() > 3)
{
directs++;
}
else break;
}
②返回序列中满足某些条件的元素个数:
int Stations = TextData.Count(s => s[0] == 'D');
(TextData是一个string类的顺序表,返回TextData中以D开头的元素个数)
③返回序列:最大值、最小值、和、平均数、指定运算等
static void Main(string[] args)
{
int[] nums = new int[] { 1, 2, 3, 4, 5 };
int sum = nums.Sum();
int max = nums.Max();
int min = nums.Min();
double average = nums.Average();
//Aggregate()实质为累加器函数
int num1 = nums.Aggregate((s, t) => s + t);
Console.WriteLine(num1);
Console.ReadKey();
}
④返回序列的中满足某条件的第一个元素本身,或者元素的索引:
a.满足条件第一个元素本身:
序列.First(指定条件,如s=>s.StartsWith("e"))
b.满足条件第一个元素的索引(位置):
var query = (from n in TextData select n).TakeWhile(s => s[0] != 'D');
int firstStation = query.Count();//firstStation即是索引
⑤序列转换:
.ToArray();序列转换成数组;.ToList()序列转换成顺序表;
public struct Point
{
public double x;
public double y;
}
ListRl=new new List();
…………
…………
List<double> PaintX = RL.Select(s => s.x).ToList();
List<double> PaintY = RL.Select(s => s.y).ToList();