powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / BV -> C#
15 сообщений из 15, страница 1 из 1
BV -> C#
    #38661632
Доброе время суток, гуру!

Помогите написать аналог функции на C#:

Код: vbnet
1.
2.
3.
Function Nullif(expression1 As Variant, expression2 As Variant)
  If expression1 = expression2 Then Nullif = Null Else Nullif = expression1
End Function



Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
BV -> C#
    #38661667
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
public static T NullIf<T>(T expression1, T expression2) {
  if (expression1 == null || expression2 == null) return null
  return expression1.Equals(expression2) ? null : expression1
}



не проверял
...
Рейтинг: 0 / 0
BV -> C#
    #38661755
Студия ругается - Т не может возвратить null... (((
...
Рейтинг: 0 / 0
BV -> C#
    #38661771
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вместо "? null" написать "? DBNull.Value"
...
Рейтинг: 0 / 0
BV -> C#
    #38661800
Antonariy,
Cannot convert expression type DBNull.Value to return type 'T' - вот такая вот печаль(((
...
Рейтинг: 0 / 0
BV -> C#
    #38661806
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
Код: c#
1.
2.
3.
4.
public static T NullIf<T>(T expression1, T expression2) {
  if (expression1 == null || expression2 == null) return null
  return expression1.Equals(expression2) ? null : expression1
}



не проверял

зря, generic типы могут оказаться не nullable, вряд ли студия разрешить компилить, тогда уж default(T) вместо null, да и зачем городить огороды из условий, когда есть && (AndAlso) или || (OrAlso)? Тогда уж как-то так:

Код: c#
1.
2.
3.
4.
        public static T NullIf2<T>(T expression1, T expression2)
        {
            return expression1 != null && expression2 != null && !expression1.Equals(expression2) ? expression1 : default(T);
        }
...
Рейтинг: 0 / 0
BV -> C#
    #38661822
капитанская дочка,
Да, примерно так, но этот метод на с# не вернет DataTime. На Visual Basic метод возвращает тип аргументов.
...
Рейтинг: 0 / 0
BV -> C#
    #38661828
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C чего вдруг не вернет?
Код: c#
1.
public static T NullIf2<T>(T expression1, T expression2)
...
Рейтинг: 0 / 0
BV -> C#
    #38661831
капитанская дочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Зигмундовичкапитанская дочка,
Да, примерно так, но этот метод на с# не вернет DataTime. На Visual Basic метод возвращает тип аргументов.

это шутка?
...
Рейтинг: 0 / 0
BV -> C#
    #38662045
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Зигмундович,

Возможно пригодится такой вариант:

Код: c#
1.
Func<object, object, object> NullIf = (t1, t2) => t1 != null && t2 != null && !t1.Equals(t2) ? t1 : null;



В случае равенства будет возвращаться реальный null, а также здесь имеет место быть Boxing/Unboxing.
...
Рейтинг: 0 / 0
BV -> C#
    #38663330
Все варианты не работают, поскольку на VB функция NullIf используется возврата разных типов данных, например:
- если она вызывается как аргумент DataTime для функции, она и вернет результат сравнения 2х DateTime;
- если она вызывается как аргумент String для функции, она и вернет результат сравнения 2х String;
И так для всех типов данных.
Не получается ее реализовать на С#. Может есть другие варианты?
...
Рейтинг: 0 / 0
BV -> C#
    #38663360
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Зигмундович,

А чем эти примеры тебя не устаивают-то? везже используется обобщенный тип. Если ты передаешь туда DateTime, так тебе и вернется DateTime, передашь string- вернется string.

Кури учебник, главу "обобщенные типы"
...
Рейтинг: 0 / 0
BV -> C#
    #38663498
Shocker.Pro,

Ругается студия, что неверный тип возвращается(
...
Рейтинг: 0 / 0
BV -> C#
    #38663884
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел ЗигмундовичShocker.Pro,

Ругается студия, что неверный тип возвращается(

Тогда показывайте как используете функцию.
...
Рейтинг: 0 / 0
BV -> C#
    #38663925
Все, разобрался - public Func<object, object, object> Nullif = (t1, t2) => t1 != null && t2 != null && !t1.Equals(t2) ? t1 : null идеально подходит!!! Всем спасибо!!!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / BV -> C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]