Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Dimon aka Manowar Blog. Аналог ISNULL() в C#. Комментарии.

Аналог ISNULL() в C#

Недавно нарвался на вопрос проверки кучи переменных на null в коде. Писать огромный if с перечислением var1 != null || var2 != null || ... varN != null меня быстро обломало и захотелось поковырять С# на предмет чего-то, похожего на T-SQL-ный INULL(). Как ни странно в итоге нашел, пусть не полный аналог, но вполне удобный для меня, конструкция со множеством || заменилась на вот такую:
Array.Find(new object[] {var1, var2, ..., varN}, delegate(object val) { return val != null; }) != null
И работаетПодмигивание

Dimon aka Manowar

03 May 2006 21:18  Комментарии (12)

04 May 2006 01:29 Jcomp

А скорость ?

Проверял ?
05 May 2006 02:11 Dimon aka Manowar

А с чем сравнивать?

с огромным if? Не, не проверял.
05 May 2006 22:43 AL

скорость ?

OФу... operation
16 May 2006 18:35 Max Pro

Вот функция из моей библиотеки классов

Примечание: скорость хорошая.
		/// <summary>
		/// Функция IsNull как в VB6, переваривает любые типы.
		/// </summary>
		/// <param name="oObject">Проверяемый объект.</param>
		/// <returns>true в случае null или DBNull.Value, иначе false.</returns>
		public static Boolean IsNull(Object oObject)
		{
			if(oObject==null || oObject==DBNull.Value) return true; else return false;
		}

16 May 2006 18:43 Max Pro

Я кстати параллельно с C# пишу на VB

И соответственно делаю параллельно библиотеки классов на этих двух языках. В результате сравнения выясняется, что стоит скомпилить проект "библиотека классов" именно на VB, так как функциональнее выходит, да и скорость, я подозреваю, у VB быстрее, особенно применительно к 2005-му. Ну и потом dll можно везде использовать, на любом языке .NET
16 May 2006 19:07 jahlive

Kompaktnee

public static Boolean IsNull(Object oObject)
{
return (oObject==null || oObject==DBNull.Value) ?true:false;
}
16 May 2006 19:24 Max Pro

Да, jahlive, молодец.

И ещё кстати если кто хочет проверять несколько объектов через запятую, то в C# это делается следующим образом: пишется десятка два перегрузок функции IsNull, в каждой последующей перегрузке указывается на один объект больше. Но в Бэйсике мне всегда нравилась возможность просто-напросто указать необязательные параметры, хотя перегрузки тоже допускаются, конечно же.
18 May 2006 00:19 mdevils

Все проще

2Max Pro, не читал спецификацию C#? Вот так можно сколь угодно проверить

Являются ли все NULL?

public static bool IsNull(params object[] objects) 
{ 
 foreach (object obj in objects)
 {
  if (obj!=null || obj!=DBNull.Value)
  {
   return false;
  }
  return true;
 }
}
Вернуть массив NULL/не NULL
public static bool[] IsNull(params object[] objects) 
{ 
 bool[] bs = new bool[objects.length];
 for (int i=0;i<objects.length;i++)
 {
  object obj = objects[i];
  bs[i] = (obj==null || obj==DBNull.Value)
 }
 return bs;
}
18 May 2006 00:20 mdevils

вернее



Являются ли все NULL?
public static bool IsNull(params object[] objects) 
{ 
 foreach (object obj in objects)
 {
  if (obj!=null && obj!=DBNull.Value)
  {
   return false;
  }
  return true;
 }
}
01 June 2006 16:59 Nisus

2 jahlive

Если уж говорить о компактности, то в твоем коде одна операция явно лишняя, вот так оно правильнее будет:
public static Boolean IsNull(Object oObject) 
{ 
    return oObject == null || oObject == DBNull.Value; 
}

:-)Стеснительность
29 June 2006 13:21 Eugene Ostroukhov

Пришел Мишка

и все разрулилУлыбка
29 June 2006 13:21 Eugene Ostroukhov

2 мдевилс

точно ретюрт тру стоит там ?Подмигивание
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта