Назначение строки - уточнение - PullRequest
0 голосов
/ 29 октября 2009

Когда я объявляю

string x = new string(new char[0]);

Работает нормально. Мой вопрос: какое значение будет присвоено х?

когда я проверяю

Console.WriteLine(x.CompareTo(null)==0);,it returns false.

Ответы [ 5 ]

7 голосов
/ 29 октября 2009

когда вы назначаете новый символ [0], ваша строка не равна нулю. Это пусто.

вы могли бы сделать:

Console.WriteLine(string.IsNullOrEmpty(x));
5 голосов
/ 29 октября 2009

x будет пустой строкой, такой же как x = "".

null и "" - это два разных строковых значения. В частности, null является пустой ссылкой, поэтому вы не можете вызывать какие-либо элементы экземпляра для нее. Следовательно, если x равно нулю, x.Length выдаст NullReferenceException.

Напротив, "" (или String.Empty) - это обычная строка, которая содержит 0 символов. Члены его экземпляра будут работать нормально, а "".Length равно 0.

Чтобы проверить, является ли строка null или пустой, позвоните (сюрприз) String.IsNullOrEmpty.

4 голосов
/ 29 октября 2009

Вы выбрали интересный случай здесь, потому что в .NET он нарушает принцип наименьшего удивления. Каждый раз, когда вы выполняете

string x = new string(new char[0]);

вы получите ссылку на ту же строку .

(РЕДАКТИРОВАТЬ: Просто чтобы быть очень ясным об этом - это ненулевая ссылка. Она ссылается на строку так же, как если бы вы использовали любую другую форму конструктора или строковый литерал.)

Я уверен, что использовал для ссылки на другую строку с "", но теперь она выглядит так же:

using System;

public class Test
{
    static void Main()
    {
        object x = new string(new char[0]);
        object y = new string(new char[0]);
        object z = "";
        Console.WriteLine(x == y); // True
        Console.WriteLine(x == z); // True
    }
}

Насколько мне известно, это только случай, когда вызов new для класса может вернуть ссылку на существующий объект.

3 голосов
/ 29 октября 2009

Строка не нулевая, она пустая.

Console.WriteLine(x.CompareTo(String.Empty)==0);
0 голосов
/ 29 октября 2009

Попробуйте вместо этого:

Console.WriteLine(x.CompareTo(string.Empty) == 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...