2012-02-17 3 views
7

Если объекты содержат пустое или пустое, то как проверить или проверить условие на то же самое?Как проверить объект пустым или пустым в C# .NET 3.5?

Как BOOL проверить, является ли объект OBJ является null или Empty

Я код следующим образом:

class Program 
{ 
    static void Main(string[] args) 
    { 
     object obj = null; 

     double d = Convert.ToDouble(string.IsNullOrEmpty(obj.ToString()) ? 0.0 : obj); 
     Console.WriteLine(d.ToString()); 
    } 
} 

С помощью этого кода я получаю NullReference Exception в Object reference not set to an instance of an object.

Pls Помогите.

Здесь я не получаю ....

Как проверить ли этот объект null или Empty без преобразования в .ToString() ??

Есть ли способ проверить то же самое ??

+1

Вы не можете преобразовать нулевой объект в строку, таким образом, ошибку. Что случилось с просто проверкой if (obj! = Null)? – rikitikitik

+1

Почему вы вызываете 'ToString()' на объект, который, как вы знаете, 'null', и поэтому генерирует 'NullReferenceException'? –

+1

Нет такой вещи, как пустой объект (хотя есть такая вещь, как пустая строка). – phoog

ответ

12

Проблема, с которой вы сталкиваетесь, заключается в том, что ваш объект имеет тип, ну, объект. Для того, чтобы оценить его с string.IsNullOrEmpty, вы должны передать свой объект в с актерами, чтобы (строка)

как так:

static void Main(string[] args) 
{ 
    object obj = null; 

    double d = Convert.ToDouble(string.IsNullOrEmpty((string)obj) ? 0.0 : obj); 
    Console.WriteLine(d.ToString()); 
} 

Это будет работать нормально, так как вы не явный вызов .ToString на ваш (несуществующий) объект.

+0

Предполагая, что 'obj' сгенерирован более сложным процессом, чем просто установка его на« null », приведение в действие не будет выполнено в том случае, если этот процесс создает реальный объект, который не является строкой. –

+1

Правильно, предполагается, что объект в этом случае будет либо нулевым, либо тем, что может быть преобразовано в строку. –

+0

Технически это предполагает, что объект может быть перенесен в строку, а не просто преобразован. Это не удалось для меня, когда obj был фактически int, с int.ToString(), но (string) int failing. Это очень плохо; Я пытался избежать дополнительного ToString(). – goodeye

3

Вы получаете нулевую ссылку, потому что вы выполняете obj.ToString(), который вернет возвращаемое значение метода obja toString(). Проблема заключается в том, что в предыдущей строке вы установите OBJ в нуль, так что вы получите ссылку на объект не ... ошибка

Чтобы сделать код работы вам нужно сделать:

//This will check if it's a null and then it will return 0.0 otherwise it will return your obj. 
double d = Convert.ToDouble(obj ?? 0.0); 

Ваш код, как это Теперь, однако всегда будет 0.0

без нулевой связывающей: (??)

double d = Convert.ToDouble(obj ? 0.0 : obj);  

EDIT

Если я правильно понимаю из комментариев, которые вы хотите знать, является ли объект пустой или пустой. Вы можете сделать это путем приведения его в строку первой вместо вызова ToString метод, который делает что-то совершенно иное:

string objString = (obj as string); 
double d = Convert.ToDouble(string.IsNullOrEmpty(objString) ? "0.0" : objString);  
+0

ok .... Как проверить, является ли этот объект «пустым» или «пустым» без преобразования в .ToString() '?? – venkat

+0

Как и вы, кроме того, что вы не вызываете метод ToString –

+0

@ TBohnen.jnr, нет строки для строки; вызов ToString не является литой. – phoog

0

Вы не должны быть немного удивлены тем, что вы получаете NullReferenceException с этим кодом. Нарушитель часть

obj.ToString() 

Если вы написали

object obj = null; 
string s = obj.ToString(); 

вы бы ожидать NullReferenceException. Поскольку вызов до ToString происходит до вызова string.IsNullOrEmpty, исключение выдается перед проверкой нулевой или пустой строки.

1

Вы можете использовать оператор ??. Он известен как оператор null-coalescing.

+0

В первый раз я слышу о «нуль-коалесцирующем» операторе и очень интересно узнать о новой вещи об этом операторе. Можете ли вы подробно рассказать о важности и преимуществах этого оператора в ситуациях, когда я могу использовать то же самое с простыми и хорошими примерами. – venkat

+0

Если объект «пуст», то как его проверить? – venkat

1

Это походит на то, что вы хотите сделать это:

object obj = null; 
double d; 

if (!double.TryParse(Convert.ToString(obj), out d)) 
{ 
    d = 0.0; 
} 

Но вопрос не делает много смысла.

2
class Program 
{ 
    static void Main(string[] args) 
    { 
     object obj = DBNull.Value; 
     if(obj != DBNull.Value) { 
      double d = Convert.ToDouble(obj); 
      Console.WriteLine(d.ToString()); 
     } 
    } 
} 
-1

Следующий код может быть более безопасным способом его достижения.

if(obj != null && !string.IsNullOrEmpty(obj.ToString())) 
{ 

} 

Этот код спасает нас от того, что объект является нестрочным.

+0

Откуда берется свойство .Value? – Enigmativity

+0

Мой плохой..Обновил это..Обратный помощник! –

+0

Кстати, ОП задал 'без преобразования в .ToString()'. – Enigmativity

Смежные вопросы