Версия .Net framework в Silverlight: нет List‹T›. Найти методы?

Сегодня я обнаружил кое-что, что меня огорчает: объекты типа System.Generic.Collections.List не имеют ряда полезных методов расширения, которые я полюбил, таких как Find, FindAll, FindIndex, Exists, RemoveAll и т. д. .

Браузер объектов в VS2008 показывает, что эти методы существуют в версии mscorlib, которую я использую, но если я смотрю на сборку в ildasm, их там нет.

Я пропустил что-то очевидное или есть способ сделать их доступными для моего приложения Silverlight?

Кроме того, мне интересно, есть ли хорошая ссылка на то, чем отличается среда выполнения Silverlight от «настоящей».

Спасибо!


person mmacaulay    schedule 03.12.2008    source источник


Ответы (5)


Вероятно, здесь происходит то, что Object Browser разрешает обычную mscorlib версии 2.0 вместо версии, используемой для silverlight.

Меня не удивляет отсутствие метода расширения Find для приложения SilverLight. Платформа .Net для SilverLight довольно сильно урезана, чтобы сделать ее достаточно маленькой для быстрой загрузки пользователями. Им пришлось сделать несколько резких сокращений, и многие предметы не вошли.

Если вам нужен метод, почему бы просто не добавить его самостоятельно? Добавление их всех через некоторое время может утомить, но это можно использовать для решения этой проблемы.

person JaredPar    schedule 03.12.2008
comment
Я, вероятно, просто реализую ту часть, которую мне не хватает, если не будет альтернативы. В настоящее время это только один метод, так что это не так много работы, но было бы неплохо вообще не делать этого :) - person mmacaulay; 03.12.2008

Только одно замечание: Find не является методом расширения. Это совершенно нормальный метод экземпляра.

Однако меня совсем не удивляет, что в Silverlight в List<T> "отсутствуют" биты. Это это урезанная версия фреймворка. К сожалению, я не знаю ни одного источника, чтобы сказать, что есть, а что нет.

person Jon Skeet    schedule 03.12.2008

Это постоянная битва, брат. Я держу свои закладки .Net API и Silverlight API рядом друг с другом, потому что я разрабатываю множество элементов управления, которые используются как в WPF, так и в Silverlight, и кажется, что каждый раз, когда у меня появляется хорошая идея для реализации функции, я запускаю во что-то фундаментальное, не поддерживаемое в Silverlight.

Я могу просто видеть встречу, чтобы обсудить то, что получило отбивную. «Для чего нам нужен этот метод find()? У нас есть отличная библиотека LINQ.

Справочник по Silverlight

person MojoFilter    schedule 03.12.2008

Тем не менее расширение .Exists не существует в качестве расширения в версии Silverlight.

person Raymond de Jong    schedule 29.06.2009

просто сошлитесь на сборку System.Core, если вы еще этого не сделали, и выполните

using System.Linq;

и для любого IEnumerable у вас будет множество методов расширения, которые могут делать то, что вам нужно, и многое другое.

Microsoft, очевидно, хочет, чтобы среда выполнения Silverlight была небольшой для загрузки, избегая тем самым дублирующих реализаций.

Многое в исходной среде уже устарело с появлением Generics и .NET 2.0, а с .NET 3.0 и методами расширения еще больше. Я думаю, то, что вы найдете в Silverlight, является хорошим намеком на будущее. То, что они упустили (например, многое в System.ComponentModel), станет своего рода устаревшим и в исходной структуре (за исключением, конечно, сервера/базы данных).

person herzmeister    schedule 23.06.2009