Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Люди склонны использовать следующее, которое ужасно и связано перестать работать:
string path = basePath + "\\" + fileName;
Лучше и более безопасный путь:
string path = Path.Combine(basePath, fileName);
Также я видел, что люди пишут пользовательский метод считать все байты из файла. Этот приезжает довольно удобный:
byte[] fileData = File.ReadAllBytes(path); // use path from Path.Combine
Как TheXenocide, на который указывают, то же запрашивает File.ReadAllText()
и File.ReadAllLines()
myString. Равняется (anotherString)
и опции включая определенные для культуры.
я держал пари, что по крайней мере 50% разработчиков пишут что-то как: если (s == "идентификатор") {...}
Большинство людей забывает тот Каталог. CreateDirectory () ухудшается корректно, если папка уже существует, и оберните его с бессмысленным, если (! Каталог. Существует (....)), вызов.
Многим людям, кажется, нравится ступать через XML-файл вручную, чтобы найти что-то, а не использовать XPathNaviagator.
System.IO.File.ReadAllText
по сравнению с записью логического использования StreamReader для маленьких файлов.
System.IO.File.WriteAllText
по сравнению с записью логического использования StreamWriter для маленьких файлов.
Материал файла.
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);
input.StartsWith("stuff")
вместо Regex.IsMatch(input, @"^stuff")
Много новых функций 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.
Вместо того, чтобы генерировать имя файла с Гуидом, просто используйте:
Path.GetRandomFileName()
класс StringBuilder и особенно Метод AppendFormat.
P.S.: Если Вы ищете измерение производительности Строковых операций: StringBuilder по сравнению со Строкой / Быстрые Строковые операции с.NET 2.0
Трудно кодирование / в управление каталогом представляет в виде строки по сравнению с использованием:
IO.Path.DirectorySeparatorChar
Строка. Соединение () (однако, почти все знают о строке. Разделение и, кажется, использует его все шансы, которые они получают...)
Я должен был недавно загрузить некоторые файлы в приложении Windows. Я нашел метод DownloadFile на объекте WebClient:
WebClient wc = new WebClient();
wc.DownloadFile(sourceURLAddress, destFileName);
Попытка выяснить, где Мои Документы живет на компьютере пользователя. Просто используйте следующее:
string directory =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Перечисление. Синтаксический анализ ()
Строка. Формат.
количество раз я видел
return "£" & iSomeValue
, а не
return String.Format ("{0:c}", iSomeValue)
или люди, добавляющие знаки процента - подобные вещи.
Path.GetFileNameWithoutExtension(string path)
Возвраты имя файла указанного пути представляют в виде строки без расширения.
Path.GetTempFileName()
Создает исключительно именованный, нулевой байт временный файл на диске и возвращает полный путь того файла.
Путь. Добавьте всегда забывается в материале, который я видел.
При всей своей скрытости в пространстве имен Microsoft.VisualBasic, TextFieldParser на самом деле является очень хорошим парсером csv. Я вижу, что многие люди либо делают свой собственный (плохо), либо используют что-то вроде хорошей библиотеки Fast CSV на Code Plex, даже не зная, что это уже встроено во фреймворк.