Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это null.
Например:
string testString = null; //Because it doesn't have a value (i.e. it's null; "Length" cannot do what it needs to do)
if (testString.Length == 0) // Throws a nullreferenceexception
{
//Do something
}
Время выполнения .NET исключение NullReferenceException при попытке выполнить действие над чем-то, что не было инстанцировано, т.е. код выше.
По сравнению с ArgumentNullException, которое обычно выбрано как защитная мера, если метод ожидает, что то, что происходит
Дополнительная информация находится в C # NullReferenceException и Null Parameter .
Да, должно быть безопасно использовать один и тот же объект Encoding
, поскольку он предназначен для бездействия, тогда как Encoder
и Decoder
являются состояниями, сохранение неполных символов и т. д., если это необходимо. Я полагаю, вы могли бы написать класс с состоянием Encoding
, но это была бы очень плохая идея. Насколько мне известно, все встроенные реализации кодирования являются безстоящими и потокобезопасными.
Например, свойства Encoding.UTF8
, Encoding.ASCII
и т. Д. Являются одиночными.
Encoding
:Any instance members are not guaranteed to be thread safe.
И дляEncoding
, и дляUTF8Encoding
. Этот шаблон может быть вызван ленивым копированием и вставкой. Но я столкнулся с той же ситуацией, что и casperOne, и документация не заставляет меня чувствовать, что я создаю синглтонUTF8Encoding
и использую его по потокам, хотя я согласен, чтоEncoding
чувствуют себя без гражданства, хотя документы не являются явным образом об этом. – Eugene Beresovsky 31 July 2013 в 09:54Encoding
фактически i> потокобезопасны (вернее, реализации .NET являются и если вы напишете свой собственный производный класс, я бы попросил вас сделать его потокобезопасным тоже.) – Jon Skeet 31 July 2013 в 09:58List<T>
черезGetEnumerator
, не документированы (или не были), но, очевидно, каждый полагается на это. , – Jon Skeet 31 July 2013 в 10:44