|
|
|
 |
 |
Dimon aka Manowar Blog. Аналог 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
|
| 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 |
Kompaktneepublic 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 мдевилсточно ретюрт тру стоит там ?
|
|
|
|
 |
 |
 |
 |
|
|