关于c#的匿名方法,我以前用到过一些,但是还是有几个问题:1. 什么时候可以使用匿名方法?
2. 匿名方法的返回值是不是只能通过retrun 后面的值来确定?
PS:这里的匿名方法只说delegate
上面的问题msdn里没有明确说明...

解决方案 »

  1.   

    ,,, 我觉得匿名方法就是 现在用了, 以后不会用的.. 就是适用场景比较小的.
    第二个问题, 明显只能通过return.....,我也不知道有米其他方式,
    唉, 好像等于没说.
      

  2.   

    只有在提供了匿名方法具体形式的情况下才能使用匿名方法,它的返回值是事先确定的,如果你return返回的值类型不符合,编译器会报错,所以不能够用过var关键字来定义一个匿名方法。例如你一个参数要传递某个委托,其委托形式肯定是定好了,这时就可以传递匿名函数进去。
      

  3.   

    匿名方法本质上就是“方法变量“。在.net2.0之前匿名方法的应用场合并不是很多,但是在Linq之后匿名方法被广泛应用,并有了更简单的定义方法。
    在使用时应该注意变量的作用域问题,和Linq中很多延时执行而带来的变量生命期的问题。
      

  4.   

    匿名方法里面的变量使用问题  ,书上和msdn上有讲的
      

  5.   

    举个简单例子,下面的例子中
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Collections;
    using System.Xml.Linq;namespace ConsoleCSharp
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<int> l = new List<int>();
                l = Enumerable.Range(1, 11).ToList();
                l.Sort(delegate(int i, int j)
                {
                    return j - i;
                }
                );
                Array.ForEach(l.ToArray(), delegate(int i) { Console.WriteLine(i); });
            }
        }
    }
    第一个匿名函数用的地方,参数是Comparison<int> comparison
    第2个匿名函数用的地方,参数是Action<int> action
    这2个匿名函数都是我试出来的,凭感觉写的,为什么这里可以用匿名函数呢?
    泛型在这里的应用我有点迷糊,<int> 的意思返回值是int还是说他的操作对象是int  ?
      

  6.   

    很好理解,第一个匿名函数的地方,原型是Comparison<T>,第二个的原型是Action<T>。
    我们看下原型就知道是操作对象还是返回值了,如果是TResult,那么就是返回值了,其它都是输入的参数。
    例如:Func<TResult>,这里面的泛型名TResult就是返回值类型。
      

  7.   

    补充一下,那个原型在VS的代码提示中会出现的,用不着查找MSDN,所以使用的时候很方便的。
      

  8.   

    1. 什么时候可以使用匿名方法?
    2. 匿名方法的返回值是不是只能通过retrun 后面的值来确定?
    --------------------------------------------------------1. 当前语境下需要方法参数时,可使用匿名方法eg: 一个方法需要一个委托(方法)参数的时候,参数就可以写成 匿名方法 的形式。匿名方法 其实 本质是 编译器帮你做了一部分工作,具体工作内容 可以和 C# 1.1 时 使用委托当参数的语法 比对得知。2.匿名方法的返回值 不是 retrun 时确定的,而是调用它的语境确定的
      

  9.   

    个人认为是在不确定时用,比如WIN32 API 一些方法都不知道类型(查MSDN就不说了,断网咋办)返回的应该是bool的话,其实返回1也没有错。
      

  10.   

    当我写到匿名函数那里  ,Vs的智能提示的参数里 T就是int了,下面的说明还是T。
    这个int是什么,和他的原型有关系。
    比如Action<int> 这个int就一定是参数。对吧
      

  11.   

    首先 TResult 是指定泛型的返回 类型为 TResult可以理解为是自定义然而有一些委托的返回类型已经定义好了
    Action<T>  和 Comparison<T> 都属于此类
      

  12.   

    http://msdn.microsoft.com/zh-cn/library/018hxwa8.aspx换行http://msdn.microsoft.com/zh-cn/library/tfakywbh.aspx
      

  13.   

    匿名方法仅仅是通过编辑器的一层额外处理来简化委托实例化的工作
    如果委托类型的返回值类型为void,匿名方法里便不能返回任何值;
    如果委托类型的返回值类型不为void,匿名方法里返回的值必须和委托类型的返回值兼容。匿名方法并不只是“匿名”的方法甚至可以构造一个闭包给开发带来极大的便利。
    IEnumerable<DateTime> dates = dateStrings.Select(
     s => DateTime.ParseExact(s, "yyyy-MM-dd", null));
      

  14.   

    1,匿名方法,主要用于“闭包”模式之中,这大大的减少了代码量,改变了开发模型
    2,用于lambda表达式,所表达的,函数参数,这种参见3.5之中的很多例子特别是Linq 。
      

  15.   

    看看这个.
    .NET Delegates: A C# Bedtime Story其中讲述了
    紧耦合-->接口-->委托/事件-->匿名委托感觉用来理解接口,委托,匿名委托是一个很不错的例子.http://www.sellsbrothers.com/writing/default.aspx?content=delegates.htm
      

  16.   

    http://www.infoq.com/cn/news/2007/06/Closures-Lifetime;jsessionid=6E759A581878428D97268DC6D2157F13闭包
      

  17.   


    怎么看像是java中的一些概念
      

  18.   

    我在最近的项目中十几个工程中有一个使用vb10,它终于支持匿名方法和lamda表达式了,让我对vb终于有点信心了。
      

  19.   

    c# 和JAva某些方面看起来是很相似的