Разработчики наиболее полезных служебных классов .NET склонны изобретать заново, а не повторно использовать

Я недавно прочитал прошлогодний пост Фила Хаака (Наиболее полезные служебные классы .NET, которые разработчики склонны изобретать заново, а не использовать повторно) и подумал, что посмотрю, есть ли у кого-нибудь дополнения к списку.

Это должно быть CW

abatishchev 17.06.2010 16:15

возможный дубликат Скрытые классы библиотеки базовых классов .NET?

John Sheehan 18.06.2010 07:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
56
2
5 967
25

Ответы 25

Enum.Parse ()

«Reflection => slow» - нелепое обобщение и чрезмерное упрощение. Чтобы использовать тип, сборка должна быть уже загружена в память. Следовательно, используемое здесь «отражение» - это просто ссылка на существующий массив. Вы не могли бы лучше прокатить свою собственную.

James Curran 08.10.2008 15:02

Торо, зачем ты вообще программируешь .NET? Это медленно ..

Valentin Vasilyev 13.09.2009 13:48

String.Format.

Сколько раз я видел

return "£" & iSomeValue

скорее, чем

return String.Format ("{0:c}", iSomeValue)

или люди, добавляющие знаки процента - и тому подобное.

String.Format был реализован для миграторов C++. return "£" & iSomeValue написать намного проще. Лично я ненавижу String.Format.

Jon Davis 05.01.2009 22:53

@Stimpy, string.Format () лучше для локализации.

Robert S. 06.01.2009 19:33

Это не локализация, это замена правильных данных неправильными данными. Если что-то стоит 5 фунтов стерлингов, вы должны показать 5 фунтов стерлингов, а не 5 долларов. 5 фунтов - это не 5 долларов.

Dour High Arch 27.07.2009 21:05

String.IsNullOrEmpty()

Хотя пару лет назад была некоторая шумиха о том, что IsNullOrEmpty ломается во вложенных циклах ...

Omar Kooheji 07.10.2008 18:21

Я не уверен, что помню что-нибудь в этом роде, я использовал его в довольно вложенных циклах и алгоритмах, так как .NET 1.0

TheXenocide 08.10.2008 01:46

Мне нравится создавать метод расширения «IsNullOrEmpty» [и «IsNotNullOrEmpty»] для строк ... считается ли это обновлением?

Seth Petry-Johnson 08.02.2010 22:49

Проверяет ли IsNullOrEmpty (), также является ли string.Trim () == string.empty пустым?

KallDrexx 14.06.2010 18:31

@KallDrexx Я думаю, они планировали добавить проверку только пробелов в C# 4

Ed James 17.06.2010 16:18

@KallDrexx: Нет, это простая проверка на соответствие null и Length == 0

Bobby 17.06.2010 16:18

@KallDrexx Существует (по крайней мере, в .NET 4.0) метод String.IsNullOrWhitespace ()

Dan Joseph 17.06.2010 16:31

String.Join () (однако почти все знают о string.Split и, кажется, используют его при каждой возможности ...)

Зачем мне использовать String.Join вместо плюса?

Karl 06.01.2009 19:33

Я предполагаю, что вы путаете String.Join (msdn.microsoft.com/en-us/library/57a79xd0.aspx) с String.Concat. (Плюс - это псевдоним последнего.)

James Curran 06.01.2009 23:58

+1. Глупо, как часто я вижу, как кто-то изобретает велосипед, создавая StringBuilder, делая логическое значение для isFirstElement и выполняя переход через коллекцию, добавляя "," перед каждым элементом, кроме первого. Просто добавьте элементы в List <string>, затем вызовите ToArray () и string.Join ().

Joe White 30.06.2009 17:29

Тем не менее, у PHP есть хорошая возможность: пропускать пустые (или пустые) строки при присоединении. Итак, когда вы выполняете String.Join(", ", LastName, FirstName), а LastName или FirstName внезапно становится null или String.Empty, у вас не уродливые ", Doe" или "John, ", но "Doe" или "John" соответственно.

Artemix 02.09.2011 20:22

@JoeWhite Просто для обновления для всех, кто наткнется на это - начиная с .NET 4 есть перегрузки, которые принимают IEnumerable<T> или IEnumerable<string>, поэтому нет необходимости в ToArray(): msdn.microsoft.com/en-us/library/dd992421 :-)

Bridge 30.08.2012 13:15

System.Text.RegularExpressions.Regex

На самом деле я бы пошел другим путем - где многие люди немедленно перейдут к решению проблемы с помощью регулярного выражения, даже если есть более простой и быстрый метод без регулярного выражения.

James Curran 07.10.2008 17:58

БАШ! Regex УДИВИТЕЛЬНЫЙ. Долой свой пренебрежительный комментарий!

user1228 07.10.2008 20:28

Ура за ответ через 4 года в будущем! Но стоит сказать .. Регулярное выражение ЖАРКОЕ МЕДЛЕННО !!!! String.Split () работает для всех, кроме самых сложных вещей, и если вы используете его с правильными перегрузками, это тоже довольно быстро.

TheFuzzyGiggler 19.07.2012 06:26

Многим людям, кажется, нравится проходить через XML-файл вручную, чтобы найти что-то, вместо того, чтобы использовать XPathNaviagator.

Мне всегда нравится читать XML в таблице данных, а затем фильтровать ее. Прекрасные, прекрасные данные!

RB. 07.10.2008 17:58

Я не знаком с XML -> DataTables. Разве для этого не требуется, чтобы XML был одноуровневым (это означает, что XML был плохим выбором для данных для начала)

James Curran 07.10.2008 18:00

input.StartsWith("stuff") вместо Regex.IsMatch(input, @"^stuff")

кроме input.StartsWith () будет работать примерно в 10 раз лучше. ЯГНИ и ПОЦЕЛУЙ!

Jeff Atwood 07.10.2008 18:04

Ха! Вы правы. Отредактировано, чтобы расположить их в правильном порядке.

mmacaulay 07.10.2008 18:38

Более того, в StartsWith () встроена хорошая семантика - человек, читающий это, точно знает, что задумано.

Jason Bunting 07.10.2008 21:58

Обновление для комментариев, а не для публикации ...

Rich 23.10.2008 09:31

Зачем вам прибегать к RegEx, если уже есть способ сделать именно то, что вам нужно?

Jon Tackabury 29.10.2008 20:56

Path.GetFileNameWithoutExtension(string path)

Возвращает имя файла из указанной строки пути без расширения.

Path.GetTempFileName()

Создает на диске временный файл нулевого байта с уникальным именем и возвращает полный путь к этому файлу.

Действительно ли GetTempFileName создает на диске файл с нулевым байтом? Что за плохо названный метод, если это так ...

Carl 07.10.2008 18:22

Он избегает условий гонки (которые могут быть дырой в безопасности) - как только он возвращает имя файла, он гарантированно существует.

Roger Lipscombe 07.10.2008 18:48

Метод до сих пор плохо назван. Давайте изобретем метод Path.CreateTempfile (), который возвращает временное имя файла, но на самом деле не создает файл. Это будет плохо из-за условий гонки, но он будет прекрасно называться GetTempFileName.

Windows programmer 23.10.2008 08:46

Эквивалентный метод, с помощью которого не создает файл, называется GetRandomFileName.

crdx 29.10.2012 12:55

@Windowsprogrammer Кажется, это так называется, потому что та же функция в Win32 API называется. Не то чтобы это хорошая причина продолжать плохо называть функции, просто скажу.

crdx 29.10.2012 13:05

Жесткое кодирование / в строку управления каталогом по сравнению с использованием:

IO.Path.DirectorySeparatorChar

Почему бы не использовать Path.Combine и вообще игнорировать DirectorySeparatorChar.

user7116 07.10.2008 19:47

были ситуации, когда мне нужен был один персонаж

TheXenocide 08.10.2008 01:47

Хотя нет никакого реального недостатка в том, чтобы поставить "/" вместо того, чтобы возиться с длинным именем переменной. В любом случае никого не волнует Mono в 99% случаев. И я не вижу другой веской причины его использовать.

dr. evil 29.04.2009 13:41

"/" отлично работает в Mono. Это "\" специфично для Windows (хотя "/" работает и для большинства WinAPI).

Joe White 30.06.2009 17:30

Файловый материал.

using System.IO;

File.Exists(FileNamePath)

Directory.Exists(strDirPath)

File.Move(currentLocation, newLocation);

File.Delete(fileToDelete);

Directory.CreateDirectory(directory)

System.IO.FileStream file = System.IO.File.Create(fullFilePath);

System.IO.File.ReadAllText против логики записи с использованием StreamReader для небольших файлов.

System.IO.File.WriteAllText против логики записи с использованием StreamWriter для небольших файлов.

Я думаю, вы имели в виду System.IO.File.ReadAllText, System.IO.File.WriteAllText.

Richard Nienaber 08.10.2008 08:18

Люди склонны использовать следующее, что некрасиво и обречено на провал:

string path = basePath + "\" + fileName;

Лучше и безопаснее:

string path = Path.Combine(basePath, fileName);

Также я видел, как люди писали собственный метод чтения всех байтов из файла. Это очень удобно:

byte[] fileData = File.ReadAllBytes(path); // use path from Path.Combine

Как указал Ксеноцид, то же самое относится к File.ReadAllText() и File.ReadAllLines().

То же самое для File.ReadAllText и File.WriteAllText

TheXenocide 08.10.2008 01:46

Я думаю, что я должен быть одним из 5 человек, которые на самом деле используют их вне чана!

RCIX 22.07.2009 09:38

Хороший. Я только что узнал кое-что новое.

Phil 14.06.2010 18:44

В материалах, которые я видел, всегда забывают о Path.Append.

Такого метода нет. Вы имеете в виду Path.Combine?

Seb Nilsson 07.10.2008 18:36

Класс StringBuilder и особенно метод AppendFormat.

P.S .: Если вы ищете измерение производительности String Operations: StringBuilder против операций со строками / быстрыми строками в .NET 2.0

См. Также класс StringWriter!

kͩeͣmͮpͥ ͩ 09.09.2009 12:29

Пытаюсь выяснить, где находятся Мои документы на компьютере пользователя. Просто используйте следующее:

string directory =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

В VB.Net: My.Computer.FileSystem.SpecialFolders.MyDocuments

Joel Coehoorn 07.10.2008 22:57

Класс System.Diagnostics.Stopwatch.

Замечательно! Не знал, что это существует. Он делает такую ​​простую вещь, но приятно, что она уже завернута.

Sambo 20.04.2011 13:48

Большинство людей забывают, что Directory.CreateDirectory () корректно ухудшается, если папка уже существует, и оборачивают ее бессмысленным вызовом if (! Directory.Exists (....)).

Это неправда. В ASP.NET 2.0 (мой тест) Directory.CreateDirectory (некоторый путь) выдает исключение, если каталог уже существует.

Bryan Rehbein 20.11.2008 01:52

У вас может быть что-то еще, если оно вызывает исключение, например, каталог, доступный только для чтения, или существующий файл с тем же именем, что и путь, который вы пытаетесь создать.

Greg Biles 24.06.2011 18:23

Environment.NewLine

Мне недавно нужно было загрузить некоторые файлы в приложении Windows. Я нашел метод DownloadFile в объекте WebClient:

    WebClient wc = new WebClient();
    wc.DownloadFile(sourceURLAddress, destFileName);

Вместо создания имени файла с помощью Guid просто используйте:

Path.GetRandomFileName()

myString.Equals (другаяСтрока)

и варианты, в том числе культурно-зависимые.

Готов поспорить, что по крайней мере 50% разработчиков пишут что-то вроде: if (s == "id") {...}

Хотя строка является ссылочным типом, операторы равенства (== и! =) Определены для сравнения значений строковых объектов, а не ссылок. Это делает тестирование на равенство строк более интуитивным. msdn.microsoft.com/en-us/library/362314fe%28VS.80%29.aspx

atamanroman 17.06.2010 16:32

Многие из новых функций Linq кажутся довольно неизвестными:

Any<T>() & All<T>()

if ( myCollection.Any( x => x.IsSomething ) )
    //...

bool allValid = myCollection.All( 
    x => x.IsValid );

ToList<T>(), ToArray<T>(), ToDictionary<T>()

var newDict = myCollection.ToDictionary(
    x => x.Name,
    x => x.Value );

First<T>(), FirstOrDefault<T>()

return dbAccessor.GetFromTable( id ).
    FirstOrDefault();

Where<T>()

//instead of
foreach( Type item in myCollection )
    if ( item.IsValid )
         //do stuff

//you can also do
foreach( var item in myCollection.Where( x => x.IsValid ) )
    //do stuff

//note only a simple sample - the logic could be a lot more complex

Все действительно полезные маленькие функции, которые вы можете использовать вне синтаксиса Linq.

Несмотря на то, что он скрыт под пространством имен Microsoft.VisualBasic, TextFieldParser на самом деле является очень хорошим парсером csv. Я вижу, что многие люди либо выкручивают свои собственные (плохо), либо используют что-то вроде красивой библиотеки Быстрый CSV в Code Plex, даже не зная, что это уже встроено в структуру.

Другие вопросы по теме