Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> начинания 
V
    Опции темы
4ybaka
Дата 24.5.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



начал разбираться с линком и сразу напоролся на проблему.
пусть есть класс с двумя полями b,c типа double.
хочу из массива элементов класса вытащить такую вещь.
Код

var ada = mclass.Select(a=> new { b = a.b / 10 + a.c} );

так вот как потом это все пригнать обратно к массиву double?
cast и ToArray не хотят...
насколько я понял это изза AnonymousType,но ведь должен же быть способ...


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
PashaPash
Дата 24.5.2008, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



4ybaka, очень простой способ - не ставить лишние фигурные скобки и операторы new.
Код

class C1
{
    public double b = 1, c = 2;
}

static void Main(string[] args)
{
    List<C1> mclass = new List<C1> { new C1(), new C1(), new C1() };
    var ada = mclass.Select(a => a.b / 10 + a.c);
    double[] arr = ada.ToArray();
}



--------------------
PM MAIL WWW   Вверх
Idsa
Дата 9.6.2008, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Цитата(4ybaka @  24.5.2008,  21:59 Найти цитируемый пост)
насколько я понял это изза AnonymousType

Да, это одно из ограничений анонимных типов: они не могут быть возвращаемыми значениями.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
PashaPash
Дата 10.6.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Цитата(Idsa @  9.6.2008,  23:12 Найти цитируемый пост)
Да, это одно из ограничений анонимных типов: они не могут быть возвращаемыми значениями. 
Причем тут вообще возвращаемые значения?


--------------------
PM MAIL WWW   Вверх
Idsa
Дата 15.6.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Цитата(PashaPash @  10.6.2008,  16:56 Найти цитируемый пост)
Причем тут вообще возвращаемые значения? 

Что-то я погорячился. В данном случае, действительно, возвращаемые значения ни при чем.
Меня смутила сигнатура метода Select:
Код

public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)

Не могу понять, как работает такой подход при использовании анонимных методов, точнее как компилятор определяет тип TResult.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Idsa
Дата 15.6.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Пожалуй, разобрался. Привык мозг к императивным языкам и функциональные примочки отказывается понимать на лету smile
Сообразил вот такой примерчик:
Код

        static void Main(string[] args)
        {
            var result = TestMethod("Hello, Vingrad!", s => new {a = s[0], b = s[1]});
        }

        public static TResult TestMethod<TParameter, TResult>(TParameter parameter, Func<TParameter, TResult> function)
        {
            return function(parameter);
        }

Меня интересовало, как компилятор определит тип анонимного типа (неизбежная тавтология smile ). А ведь по сути анонимные классы в данном контексте ничем не отличаются от обычных: на этапе компиляции будет сформировано определение класса взамен анонимного, и этот класс и станет типом TResult.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.