Расширение для возврата DBnull, когда строка пуста - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь создать собственное расширение для строки в C #, пожалуйста, найдите пример ниже, мое требование состоит в том, чтобы это расширение возвращало DBNull, когда строка недопустима, иначе она должна вернуть текст. Как это сделать My Factory.IsValidString имеет все проверки для определения правильности строки.

public static string DBString(this string Text)
{
    return (!Factory.ISValidString(Text)) ? DBNull: Text;
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вместо использования DBNull.Value просто используйте SqlString.Null и измените тип возвращаемого значения на SqlString, и здесь приведение не требуется, поскольку существует неявное преобразование между string и SqlString:

public static SqlString DBString(this string Text)
{
    return (!Factory.ISValidString(Text)) ? SqlString.Null : Text;
}

Это решение позволяет вызывающему абоненту знать, что он имеет дело с типом SqlString, а не просто с типом object, который может содержать что-либо.

0 голосов
/ 27 апреля 2018

Как Evk сказал в комментариях к вашему посту:

DBNull и string - это разные типы, и они не имеют общего родительский тип, кроме объекта, поэтому ваш метод расширения должен вернуть object а не string

Так что вам следует изменить метод расширения, как показано ниже:

public static object DBString(this string Text)
{
    return (!Factory.ISValidString(Text)) ? (object)DBNull.Value: Text;
}

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

...