.NET Framework версия в Silverlight: нет списка <T>. Найти методы? - PullRequest
4 голосов
/ 03 декабря 2008

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

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

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

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

Спасибо!

Ответы [ 5 ]

5 голосов
/ 03 декабря 2008

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

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

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

1 голос
/ 29 июня 2009

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

1 голос
/ 03 декабря 2008

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

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

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

1 голос
/ 03 декабря 2008

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

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

0 голосов
/ 23 июня 2009

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

using System.Linq;

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

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

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

...