2012-05-23 9 views
0

Ниже показан MyEmpty, который является «", пока я думал, что это будет null.Почему переменная строки readonly автоматически назначается String.Empty ("")?

public class SomeClass 
{ 
    public static readonly String MyEmpty; 
    ... 
} 

Если MyEmpty является "", а не null, то это должно быть так, как показано ниже?

public class SomeClass 
{ 
    public static readonly String MyEmpty = ""; 
    ... 
} 

Каким-то образом «readonly» делает это, но почему?

Заранее спасибо.

[Редактировать]

Я проверял эти два с помощью MessageBox.Show() при условии, что этот метод будет сгенерировано исключение, когда я даю ему нулевое значение. Но это вообще не вызывало каких-либо исключений, поэтому я подумал, что в моем первом коде MyEmpty не был нулевым, а «».

Спасибо, что пытались объяснить разницу между нулем и «», а также мою ошибку.

+0

Вы назначаете его 'String.Empty' где-нибудь? Потому что 'String.Empty' - пустая строка (т. Е.' '' '), А не' null'. Это не одно и то же. – Spoike

+0

Ну пуст назначается '' '' в конструкторе строки – V4Vendetta

+0

Оценивается. Благодаря! –

ответ

1

С вашим первым кодом MyEmpty должен быть пустым.

public class SomeClass 
{ 
    public static readonly String MyEmpty; <- Gets null 
    ... 
} 

вы указали «ReadOnly» ключевое слово, так что я предполагаю, что единственное место, вы изменили это значение «» в конструкторе.

Причина, по которой вы не можете получить «" без указания ее, заключается в том, что необходимо выделить пустую строку "" (если не указать ссылку string.empty), поэтому не может быть, что вы получаете это значение по умолчанию

+0

Подождите, вы абсолютно правы. Я тестировал два кода с помощью MessageBox.Show() и полностью забыл, что метод также принимает нулевое значение, не бросая никаких исключений. –

+0

Добавьте точку останова до появления MessageBox.Show, а затем вы можете проверить значение, указав мышью на MyEmpty – eyossi

+0

Я только что сделал. Большое вам спасибо :) –

0

Строка является эталонным типом. Пустая строка - это нечто иное, чем string = null. Second означает, что нет ссылки на строковый объект.

+0

Спасибо! Я ценю это! –

1

string.Empty такое же, как "", который строка 0 длины.

В то время как Null означает, что есть Нет строки.

+0

Итак, конструктор строки класса инициализирует string.Empty как Empty = ""? –

0

Компилятор не допускает пустых структур, поэтому элементы, такие как параметры readonly и реквизиты, получают начальное значение «» или 0 для int и т. Д. Поскольку теоретически вы не должны назначать их при объявлении одного внутри метода, он дать вам исключение.