为什么这个Lambda函数在ASP.NET中不起作用

时间:2010-03-01 13:23:11

标签: asp.net lambda

Dictionary<string, int> myList = new Dictionary<string, int>();
List<KeyValuePair<string, int>> result = new List<KeyValuePair<string, int>>(myList);
result.Sort((first, second) => second.Value.CompareTo(first.Value));

在构建

时,它会在第3行引发5个错误

这是来自ASP.NET 2.0的屏幕截图 alt text http://img696.imageshack.us/img696/3668/lambdas.jpg

这是来自.NET 2.0中的控制台应用程序 alt text http://img138.imageshack.us/img138/4788/lambda2.jpg

所以你认为出了什么问题?

为约翰 alt text http://img705.imageshack.us/img705/3618/lambda3.jpg

ok ..所以这里是一个RAR文件,其中包含一个Console应用程序和一个为.NET 2.0编写的Web应用程序 Lambda.rar

4 个答案:

答案 0 :(得分:3)

试着把它放在一个地方:

C#编程语言在很大程度上独立于.NET Framework。其中一个例子是Visual Studio 2008引入了C#编程语言的第3版,它支持lambda表达式。同一版本的Visual Studio 2008还引入了.NET Framework 3.5版。它还引入了针对Framework 2.0,2.0或3.5版本的功能,同时允许您使用该语言的2.0或3.0版本。

例如,这允许您在面向.NET Framework 2.0或3.0版本的程序中使用C#3.0功能。

不知何故,您的ASP.NET应用程序(或者它是一个网站)被设置为使用C#编程语言的2.0版本。您的控制台应用程序设置为使用3.0版。这就是为什么它适用于您的控制台应用程序而不是ASP.NET应用程序。

ASP.NET始终并且将始终支持与控制台应用程序相同的.NET Framework和C#编程语言功能。如果你看到两者之间的差异,那么你的设置就会有所不同,而不是平台上的差异。这是基于自1.0版本的beta版以来对ASP.NET的了解。

答案 1 :(得分:2)

您的第二个屏幕截图是文件顶部(使用指令),并且无论是意外还是设计,您都明确提到“.NET 2”。所以,显而易见的问题是:

您使用的是C#3吗?因为Lamdas不适用于C#2。 (注意:它是语言版本,而不是/ NET框架版本重要!)

多重修改:该死的,我的第一次编辑让我更加不正确: - )

答案 2 :(得分:0)

您是否确保将此代码放在方法中?或者你是否在课堂上有它。在类级别拥有它会在构建时抛出5个错误。

<强>为

class Program
{
    var myList = new Dictionary<string, int>();
    var result = new List<KeyValuePair<string, int>>(myList);
    result.Sort((x, y) => x.Value.CompareTo(y.Value));  

    static void Main(string[] args)
    {

    }
}

给出以下错误:

  

错误1无效令牌'('在课堂上,   struct或接口成员   声明
  错误2无效令牌','   在类,结构或接口成员中   声明
  错误3令牌无效')'   在类,结构或接口成员中   声明
  错误4无效令牌'('   在类,结构或接口成员中   声明
  错误5无效令牌')'   在类,结构或接口成员中   声明

不可

class Program
{
    static void Main(string[] args)
    {
        var myList = new Dictionary<string, int>();
        var result = new List<KeyValuePair<string, int>>(myList);
        result.Sort((x, y) => x.Value.CompareTo(y.Value));  

    }
}

答案 3 :(得分:0)

using System;
using System.Collections.Generic;

namespace SO
{
    class Program
    {
        public static void Main(string[] args)
        {
            var myList = new Dictionary<string, int>();
            myList.Add("a",2);
            myList.Add("b",50);
            myList.Add("c",6);

            var result = new List<KeyValuePair<string, int>>(myList);
            result.Sort((first, second) => second.Value.CompareTo(first.Value));
            result.Reverse();

            foreach (KeyValuePair<string, int> pair in result)
            {
                Console.WriteLine(pair.Value);
            }

            Console.ReadLine();
        }
    }
}

以上似乎在3.5和2下编译......

也适用 - 只是跑了。