zoukankan      html  css  js  c++  java
  • 复习一些小知识

      今天无意在网上看到一些招聘试题,就看了看,发现好多东西都忘了,就把代码又打了一遍

    1.拉姆达表达式(Lambda Expressions)(MSDN链接:https://msdn.microsoft.com/zh-cn/library/bb549151.aspx

     无参数的拉姆达表达式+ Func<TResult> 委托

    给一个方法传了一个参数,这个参数是一个无参的拉姆达表达式,T表示委托中方法的参数,TResult表示方法的返回值,这里用的是一个重载Fun<TResult>,并且++在拉姆达表达式中是不一样的。

     1         static void Main(string[] args)
    2
    { 3 int counter = 0; 4 Program.WriteStream(() => counter++); 5 Console.WriteLine("Final value of counter: {0}", counter); 6 counter = 0; 7 Program.WriteStream(() => ++ counter); 8 Console.WriteLine("Final value of counter: {0}", counter); 9 Console.ReadKey(); 10 } 11 static void WriteStream(Func<int> counter) 12 { 13 for (int i = 0; i < 10; i++) 14 { 15 Console.Write("{0}, ", counter()); 16 } 17 Console.WriteLine(); 18 }

    最后结果:

    2.Func<T, TResult> 委托的使用

     1  static void Main()
     2         {
     3             Func<int, double> expr = x => x / 2;
     4             int someNumber = 9;
     5             Console.WriteLine("Result: {0}", expr(someNumber));
     6             Func<double, double> exp = x => x / 2;
     7             Console.WriteLine();
     8             Console.WriteLine("Result: {0}", exp(someNumber));
     9             Console.ReadKey();
    10         }

    结果:

    x=>x/2为拉姆达表达式;Func<>为 delegate System.Func<T,TResult>

    根据我们学习的数学知识,9/2应当结果是4.5,为什么第一个结果是4而不是4.5,是因为x是整型,x/2的结果也是整型,虽然在上述我们拉姆达表达式中,我们指明结果是double,但x/2这个表达式,由于x是整型,故计算出来的结果已被截掉小数,然后再转换为double,故结果是4,而不是4.5;第二个表达式相反。

    3.Action<T> 委托 https://msdn.microsoft.com/zh-cn/library/018hxwa8.aspx

     1 List<Action> lists = new List<Action>();
     2             for (int i = 0; i < 5; i++)
     3             {
     4                 Action t = () =>
     5                   {
     6                       Console.WriteLine(i.ToString());
     7                   };
     8                 lists.Add(t);
     9             }
    10             foreach (Action act in lists)
    11             {
    12                 act();
    13             }
    14             Console.ReadKey();
    View Code

    结果为:5 5 5 5 5

         泛型Action<T>委托和Func<T>委托是系统定义的两个泛型委托。Action<T>委托表示引用一个返回类型为Void的方法。这个委托存在不同的变体,可以传递之多16个不同的参数类型。同时,没有泛型参数的Action类可以调用没有参数的方法。例如,Action<in T>表示有一个输入参数的方法,Action<in T1,in T2>表示有两个输入参数的方法。Func<T>可以以类似的方法使用。不过Func<T>允许调用带返回参数的方法。Func<T>也有不同的变体,之多可以传递16个参数和一个返回类型。例如:Func<out TResult>委托类型可以无参的带返回类型的方法,Func<in T1,inT2,out Tresult>表示带两个参数和一个返回类型的方法。需要记住一个东西,Action<T>中的T可以有多个,但这些T类型都表示不同的输入类型。Func<T>可以表示带输出的方法,T可以有多个,且只有最后一个表示输出即最后一个是返回类型。Func<in T1,inT2,out Tresult>中的字符in、out在实际代码中是不会出现的。

    其实泛型委托和自定义的委托在使用上没什么不同。只不过泛型委托Func<T>系统已经为我们定义好了,直接使用就可以了,不需要再进行这样的定义delegate double DoubleOp(double x);。另一个泛型委托Action <T>的使用也是一样的,只不过不能有返回类型而已。


     

  • 相关阅读:
    Lucene.Net 2.3.1开发介绍 —— 二、分词(一)
    控制‘控制台应用程序’的关闭操作
    详解for循环(各种用法)
    敏捷软件开发
    Sql Server的一些知识点
    在SharePoint 2010 中配置Remote Blob Storage FILESTREAM Provider
    使用LotusScript操作Lotus Notes RTF域
    JOpt Simple 4.5 发布,命令行解析器
    John the Ripper 1.8.0 发布,密码破解工具
    PacketFence ZEN 4.0.1 发布,网络接入控制
  • 原文地址:https://www.cnblogs.com/sening/p/4508650.html
Copyright © 2011-2022 走看看