c # Объект obj имеет значение {}.Что такое "{}"? - PullRequest
2 голосов
/ 21 октября 2010

Я использую какой-то старый код, который выполняет SQL-запрос в качестве ссылки.

В какой-то момент получается что-то вроде:

sqlDataAdapter.Fill(dataSet);
DataRow dataRow = dataSet.Tables[0].Rows[0];
Object obj = dataRow[fieldName];

Старый код делает:

string output;
if (!string.IsNullOrEmpty(obj.ToString())) { output = obj.ToString(); }
else { output = "Not Available"; }

Я изменил их на:

output = obj as string ?? "Not Available"

Но иногда это ломалось. Как я и подозревал, это происходило, когда вход был int. Приведение в качестве int в этих случаях решило эту проблему.

Тогда возникла другая проблема, когда для obj[fieldName] типа int было введено нет записи. Когда я прошел через отладчик, я с удивлением обнаружил, что obj не null. В VS выявлено, что оно имеет значение {}.

Какого черта {}? Как мне сделать булеву проверку?

(в старом коде, кажется, .ToString() возвращает "" в этом случае и работает как положено.)

Ответы [ 2 ]

5 голосов
/ 21 октября 2010

{ и } - открывающие и закрывающие фигурные скобки, которые символизируют начало и конец объекта. Следовательно, пустой объект без специальных свойств обозначается как {}. Отладчик использует эту нотацию, чтобы помочь вам визуально различать пустой объект, пустую строку и ноль.

Если вы наведете курсор на obj[fieldName], а для fieldName нет записи, отладчик не будет об этом беспокоиться, он покажет значение obj. Вам придется использовать окно немедленное или часы / быстрые часы. Отладчик будет видеть только то, как вы наводите курсор мыши на obj и предполагаете, что вы ссылаетесь на сам массив, а не на содержимое массива по указанному индексу.

0 голосов
/ 01 сентября 2018

На случай, если кто-нибудь снова столкнется с этой проблемой.

Решение, если объект val отображается {} в режиме отладки

// Check if its not null or empty
if (!IsNullOrEmpty(val.ToString().ToArray()))
{
    // Do something with val
    dt.Rows.Add(val);
}

public static bool IsNullOrEmpty<T>(T[] array)
{
    return array == null || array.Length == 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...