Давайте составим список ответов, где вы разместите свои превосходные и любимые методы расширения .
Требование состоит в том, что должен быть опубликован полный код, а также пример и объяснение того, как его использовать.
Основываясь на высоком интересе к этой теме, я настроил проект с открытым исходным кодом, который называется extensionoverflow в Codeplex .
Пожалуйста, отметьте свои ответы принятием, чтобы поместить код в проект Codeplex.
Пожалуйста, отправьте полный исходный код, а не ссылку.
Новости Codeplex:
24.08.2010 Страница Codeplex теперь здесь: http://extensionoverflow.codeplex.com/
11.11.2008 XmlSerialize / XmlDeserialize теперь реализован и протестирован .
11.11.2008 Есть еще место для большего количества разработчиков. ;-) Присоединяйтесь сейчас!
11.11.2008 Третий участник присоединился к ExtensionOverflow , добро пожаловать в BKristensen
11.11.2008 FormatWith теперь реализован и протестирован .
09.11.2008 Второй участник присоединился к ExtensionOverflow . добро пожаловать в чакрит .
09.11.2008 Нам нужно больше разработчиков. ;-)
09.11.2008 ThrowIfArgumentIsNull в настоящее время реализовано и модульное тестирование на Codeplex.
источник
Ответы:
Позволяет мне заменить:
С:
источник
In
, но, возможноIsIn
, будет лучше.In<T>(...)
и нашел, что это самый полезный метод расширения за пределами стандартной библиотеки. Но я не в ладах с именемIn
. Предполагается, что имя метода описывает то, что он делает, ноIn
не делает этого. Я назвал этоIsAnyOf<T>(...)
, но я думаю,IsIn<T>(...)
что будет достаточно.У меня есть различные методы расширения в моем проекте MiscUtil (полный исходный код доступен здесь - я не буду повторять это здесь). Мои любимые, некоторые из которых включают другие классы (например, диапазоны):
Дата и время - в основном для юнит-тестов. Не уверен, что я буду использовать их в производстве :)
Диапазон и шаг - огромное спасибо Марку Гравеллу за его работу оператора, которая сделала это возможным:
Сравнения:
Проверка аргументов:
LINQ to XML применяется к анонимным типам (или другим типам с соответствующими свойствами):
Нажмите LINQ - это займет слишком много времени, чтобы объяснить здесь, но искать его.
источник
Строка. Формат ярлыка:
Пример:
Для быстрого копирования и вставки перейдите сюда .
Разве вы не находите более естественным печатать
"some string".F("param")
вместоstring.Format("some string", "param")
?Для более удобочитаемого имени, попробуйте одно из следующих предложений:
..
источник
Это какое-то использование?
источник
OneOf
принять . Тогда вы всегда можете также иметь перегрузку , которая принимает ARG и просто передает , что в перегрузку. Я дал ответ (прямо внизу прямо сейчас) с помощью метода, аналогичного вашему , но с перегрузкой, которая принимает параметр (что, если я хочу, чтобы что-то происходило в 75% случаев?). Кроме того, просто придирки: ваш пример кода будет выбрасывать, так как никогда не инициализируется.IList<T>
params
IList<T>
NextBool
CoinToss
probability
NullReferenceException
rand
CoinToss
реализовывать с помощью,rng.NextDouble() < .5
потому что внутренне.Next(int)
сделано с помощью,.NextDouble()
чтобы вы могли сохранить приведение, * и проверку.Пример:
источник
Метод расширения:
Метод применяется для всех типов и позволяет добавлять в список ряд элементов в качестве параметров.
Пример:
источник
var list = new List<int>{5,4,8,4,2};
ICollection<T>
; то он также может быть использован, например,LinkedList<T>
иHashSet<T>
, не только индексированные коллекции.Обязательно внесите это в проект codeplex.
Сериализация / десериализация объектов в XML:
источник
ToXml()
(какToString()
)ForEach для IEnumerables
Наивный пример:
Классный пример:
Замечания:
Это не так,
Select
потому чтоSelect
ожидает, что ваша функция вернет что-то, как для преобразования в другой список.ForEach просто позволяет вам выполнить что-то для каждого из элементов без каких-либо преобразований / манипуляций с данными.
Я сделал это, чтобы я мог программировать в более функциональном стиле, и я был удивлен, что в List есть ForEach, а в IEnumerable нет.
Поместите это в проект codeplex
источник
Мои конверсионные расширения, которые позволяют вам:
Вот как это размещено на TheSoftwareJedi.com
Вы можете запросить значение по умолчанию (вызывает пустой конструктор или «0» для чисел) при неудаче, указать значение «по умолчанию» (я называю это «другое») или запросить ноль (где T: класс). Я также предоставил как модели молчащих исключений, так и типичную модель TryParse, которая возвращает логическое значение, указывающее предпринятые действия, и выходной параметр содержит новое значение. Так что наш код может делать такие вещи
Я не мог заставить Nullable типы втиснуть все это очень чисто. Я пытался около 20 минут, прежде чем я бросил в полотенце.
источник
ToOrNull
имеет точно такое же поведение, какToOrDefault
(например, если вы вызываетеToOrDefault
ссылочный тип с неудачным преобразованием, он вернетсяnull
). Но что более важно, это кажется мне излишним, посколькуvar s = myObject as string
выполняет то же самое, что иvar s = myObject.ToOrNull<string>()
- но без необходимости пойматьInvalidCastException
. Я что-то пропустил?У меня есть метод расширения для регистрации исключений:
И это используется так:
[извините за публикацию дважды; 2-й лучше разработан :-)]
источник
Полезно для разбора строки в Enum.
Кредит идет к Скотту Дорману
--- Редактировать для проекта Codeplex ---
Я спросил Скотта Дормана, не возражает ли он, чтобы мы опубликовали его код в проекте Codeplex. Вот ответ, который я получил от него:
источник
Я нахожу это довольно полезным:
Вы можете использовать его на CodePlex.
источник
DateTimeExtensions
Примеры:
источник
gitorious.org/cadenza - это полная библиотека некоторых из самых полезных методов расширения, которые я видел.
источник
Вот один, который я часто использую для форматирования презентации.
источник
Вот к и от римских цифр. Не часто используется, но может быть удобно. Применение:
Источник:
источник
Удобный способ справиться с размерами:
источник
Для Winform Controls:
IsDesignTime Использование:
SetDropdownWidth Использование:
Я забыл упомянуть, не стесняйтесь использовать их на Codeplex ...
источник
ThrowIfArgumentIsNull - это хороший способ сделать эту нулевую проверку, которую все мы должны сделать.
Ниже описан способ его использования, и он работает со всеми классами в вашем пространстве имен или там, где вы используете пространство имен внутри.
Можно использовать этот код в проекте CodePlex .
источник
default(T)
для этого и удалить требование класса.Require.ThatArgument(input != null)
илиRequire.ThatArgument(personId > 0)
. Он не требует намного больше кода, он намного более гибок и хорошо читается. У меня есть дополнительные переопределения, которые принимают функции, когда вы хотите настроить сообщение об ошибке или само исключение.Я скучаю по выражению With в Visual Basic при переходе на C #, так что вот оно:
А вот как использовать его в C #:
Экономит много печатать!
Сравните это с:
положить в проекте codeplex
источник
Принимает camelCaseWord или PascalCaseWord и «словоизирует» его, т.е. camelCaseWord => верблюд Case Case Word
Я часто использую его в сочетании с Capitalize
Пример использования
Бесплатное использование в проекте codeplex
источник
Я нашел это полезным
Удаляет нулевую проверку в коде вызова. Теперь вы можете сделать
источник
Преобразование двойного в строковое форматирование с использованием указанной культуры:
Пример:
источник
Ниже приведен метод расширения который адаптирует код Рика Страля (и комментарии), чтобы вам не приходилось угадывать или читать метку порядка байтов массива байтов или текстового файла каждый раз, когда вы конвертируете его в строку.
Фрагмент позволяет вам просто сделать:
Если вы обнаружите какие-либо ошибки, пожалуйста, добавьте в комментарии. Не стесняйтесь включать его в проект Codeplex.
источник
Вот тот, который я только что создал сегодня.
Это позволяет вам сделать это:
который более свободно и (IMO) легче читать, чем это:
источник
thingy.NullOr(t => t.Count)
, гдеCount
int? Вы должны возвращать,default(TReturn)
а не ноль, таким образом, вам не понадобитсяclass
ограничение, и оно будет работать и для типов значенийTReturn elseValue = default(TReturn)
что доступен только для .NET 4.0? У меня 3.5 SP1, и я никогда не видел эту конструкцию (ни у меня нет моего компилятора). Я просто переместил это внутрь метода. Одна проблема, однако, заключается в том, что объединение типа NULL в объект для использования с методом дает неожиданный результат (0 против ожидаемого нуля).default(T)
ключевое слово существует с VS2005, но я думаю, что параметры по умолчанию - это новая функция .NET 4. Самый простой способ обойти это - иметь два варианта: один, который принимает параметр, а другой - нет. Я обновлю ответ, чтобы быть совместимым с CLR 2.0. Что касается бокса - в этом все делоdefault
. Это будут 0-инициализированные данные для типа значения и нуль для всех ссылочных типов. TReturn типа значения должен оставаться распакованным на протяжении всей функции.x.Value
должно возвращать значение NULL (если, например,int?
было NULL) или значение, если оноint?
имеет значение. Возвращение,0
когдаint? x = null
оно передано и помещено в объект, является странным случаем. Я видел подобные проверки для обнуляемых типов в библиотеках, таких как беглый nhibernate и linfu (я думаю) для этого конкретного случая, позволяя вам снять ограничение класса, как предлагалось ранее.«Пожалуйста, отметьте свои ответы принятием, чтобы поместить код в проект Codeplex».
Почему? Все вещи на этом сайте под CC-SA-2,5 , так что просто поместите свой проект переполнения расширений под той же лицензией, и вы можете свободно использовать его.
В любом случае, здесь есть функция String.Reverse, основанная на этом вопросе .
источник
Я устал от утомительной проверки нуля при извлечении значений из MySqlDataReader, поэтому:
Конечно, это может быть использовано с любым SqlDataReader.
У обоих и Джо было несколько хороших комментариев о том, как это сделать, и с тех пор у меня была возможность реализовать нечто подобное в другом контексте, поэтому вот другая версия:
источник
as
ключевое слово, чтобы получить значение от читателя с нулевым значением. Если вы объедините??
оператор слияния null с оператором as, вы даже можете иметь ненулевое значение по умолчанию для перехода непосредственно к типу значения. См stackoverflow.com/questions/746767/...Меня раздражало, что LINQ дает мне OrderBy, который принимает класс, реализующий IComparer в качестве аргумента, но не поддерживает передачу простой анонимной функции сравнения. Я исправил это.
Этот класс создает IComparer из вашей функции сравнения ...
... и эти методы расширения раскрывают мои новые перегрузки OrderBy для перечислимых объектов. Я сомневаюсь, что это работает для LINQ to SQL, но отлично подходит для LINQ to Objects.
Вы можете поместить это в кодекс, если хотите.
источник
Этот для MVC добавляет возможность генерировать
<label />
тег дляHtml
переменной, доступной в каждомViewPage
. Надеемся, что это будет полезно для других, пытающихся разработать подобные расширения.Использование:
Вывод:
Код:
источник
Включите это:
... в это:
... используя этот метод расширения:
Дополнительные методы расширения ADO.NET: DbExtensions
источник