Почему эта лямбда-функция не работает в ASP.NET - PullRequest
0 голосов
/ 01 марта 2010
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));

выдает 5 ошибок в строке 3 при построении

Вот скриншот из ASP.NET 2.0 альтернативный текст http://img696.imageshack.us/img696/3668/lambdas.jpg

это из консольного приложения в .NET 2.0 альтернативный текст http://img138.imageshack.us/img138/4788/lambda2.jpg

так что ты думаешь пошло не так?

для Джона альтернативный текст http://img705.imageshack.us/img705/3618/lambda3.jpg

окей ... вот вам файл RAR, который содержит консольное приложение и веб-приложение, написанное для .NET 2.0 Lambda.rar

Ответы [ 4 ]

3 голосов
/ 01 марта 2010

Просто чтобы попытаться получить это в одном месте:

Язык программирования C # в значительной степени не зависит от .NET Framework. Одним из примеров этого является то, что Visual Studio 2008 представила версию 3 языка программирования C #, которая поддерживала лямбда-выражения. В той же версии Visual Studio 2008 также была представлена ​​версия 3.5 .NET Framework. Также появилась возможность ориентироваться на версию 2.0, 3.0 или 3.5 платформы, в то же время позволяя использовать версию 2.0 или 3.0 языка.

Это позволяет, например, использовать функции C # 3.0 в программе, предназначенной для версии 2.0 или 3.0 .NET Framework.

Каким-то образом ваше приложение ASP.NET (или веб-сайт) настроено на использование версии 2.0 языка программирования C #. Ваше Консольное приложение настроено на использование версии 3.0. Вот почему он работает в вашем консольном приложении, а не в приложении ASP.NET.

ASP.NET всегда и всегда будет поддерживать те же функции языка программирования .NET Framework и C #, что и консольное приложение. Если вы видите разницу между ними, то это разница в ваших настройках, а не разница в платформах. Это основано на моих знаниях ASP.NET начиная с бета-версии 1.0.

2 голосов
/ 01 марта 2010

Ваш второй снимок экрана появляется в верхней части файла (директивы Using), и вы явно упоминаете «.NET 2», случайно или намеренно. Итак, очевидный вопрос:

Вы используете C # 3? Потому что Lamdas не были доступны в C # 2. (Примечание: это языковая версия, а не версия / NET Framework!)

Мультиредактирование: Черт, мое первое редактирование сделало меня еще более неправильным: -)

0 голосов
/ 01 марта 2010
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 ...

Работает тоже - просто запустил.

0 голосов
/ 01 марта 2010

Вы гарантировали, что поместите этот код в метод? Или у вас это на уровне класса. Наличие этого на уровне класса приводит к 5 ошибкам при сборке.

Bad

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 Неправильный токен '(' в классе, структура или интерфейсный член декларация
Ошибка 2 Неверный токен ',' в классе, структуре или члене интерфейса Заявление
Ошибка 3 Неверный токен ')' в классе, структуре или члене интерфейса декларация
Ошибка 4 Неверный токен '(' в классе, структуре или члене интерфейса Декларация
Ошибка 5 Неверный токен ')' в классе, структуре или члене интерфейса декларация

Good

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));  

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...