Вопрос:
Если объекты содержат null или empty, то как проверить или проверить условие для того же?
Как 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()??
Есть ли способ проверить то же самое?
Лучший ответ:
Проблема, с которой вы сталкиваетесь, заключается в том, что ваш объект имеет тип, ну, объект. Чтобы оценить его с помощью string.IsNullOrEmpty, вы должны передать свой объект с помощью cast to (string)
так:
static void Main(string[] args) { object obj = null; double d = Convert.ToDouble(string.IsNullOrEmpty((string)obj) ? 0.0 : obj); Console.WriteLine(d.ToString()); }
Это будет работать отлично, поскольку вы явно не вызываете .ToString на свой (несуществующий) объект.
Ответ №1
Вы получаете нулевую ссылку, потому что выполняете obj.ToString(), который возвращает возвращаемое значение метода obj ToString(). Проблема в том, что в предыдущей строке вы устанавливаете obj в null, чтобы получить ссылку на объект не… error
Чтобы сделать работу с кодом, вам нужно выполнить:
//This will check if it 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);
ИЗМЕНИТЬ
Если я правильно понимаю из комментариев, которые вы хотите знать, является ли объект пустой или пустой. Вы можете сделать это, выставив сначала строку, а не вызов метода ToString, который делает что-то совершенно другое:
string objString = (obj as string); double d = Convert.ToDouble(string.IsNullOrEmpty(objString) ? «0.0» : objString); Ответ №2class Program { static void Main(string[] args) { object obj = DBNull.Value; if(obj != DBNull.Value) { double d = Convert.ToDouble(obj); Console.WriteLine(d.ToString()); } } } Ответ №3
Вы можете использовать оператор ??. Он известен как оператор null-coalescing.
Ответ №4
Похоже, что вы хотите сделать это:
object obj = null; double d; if (!double.TryParse(Convert.ToString(obj), out d)) { d = 0.0; }
Но вопрос не имеет большого смысла.
Ответ №5
Вы не должны удивляться, что с этим кодом вы получаете NullReferenceException. Нарушающая часть
obj.ToString()
Если вы написали
object obj = null; string s = obj.ToString();
вы ожидаете NullReferenceException. Поскольку вызов ToString происходит перед вызовом string.IsNullOrEmpty, исключение генерируется перед проверкой нулевой или пустой строки.
Ответ №6
Следующий код может быть более безопасным способом его достижения.
if(obj != null && !string.IsNullOrEmpty(obj.ToString())) { }
Этот код избавляет нас от того, что объект является нестроковым.