Массив параметров C# SqlParameter как условно установить значение null с помощью тернарного оператора

#c# #enums

Вопрос:

У меня есть следующий фрагмент кода, в котором я пытаюсь установить для параметра sql значение null, если одно из значений моего объекта равно null, а если нет, установите для него другое значение переменной.

В идеале я бы просто имел enumvalue значение null, но, поскольку это преобразование перечисления EnumListValues , значения null по умолчанию равны 0. Поэтому тройное решение, которое я придумал, состоит в том, чтобы обойти это. Я не хочу, чтобы моя enumvalue переменная была равна 0, если object1 она не существует.

 public enum EnumListValues
{
    Disabled = 0,
    Enabled = 1
}

Enum.TryParse(object1?.Value, out EnumListValues.LightStatus enumvalue);
new SqlParameter("object1param", SqlDbType.Bit) {Value = object1 != null ? enumvalue : DBNull.Value } //enumvalue is 0 or 1
 

Однако я получаю ошибку:

Ошибка CS8370
Функция «условное выражение целевого типа» недоступна в C# 7.3. Пожалуйста, используйте языковую версию 9.0 или выше

Комментарии:

1. вы пытались обновить версию проекта c#?

2. Это рекомендуемое решение моей проблемы? Я просто хочу знать, является ли это лучшим способом решить мою проблему или мне следует попробовать другой подход.

3. Вы можете попробовать себя в боксе здесь {Value = object1 != null ? (object)enumvalue : (object)DBNull.Value }

4. @Eldar Только один из них должен быть приведен object , и тогда оператор будет знать, чтобы неявно привести другой.

Ответ №1:

Самый простой ответ-использовать тройку с возвратом из TryParse, чтобы получить то, что вы хотите. Это превратило бы значение enumvalue в световой статус? который затем вы можете ввести в свой SqlParameter.

 var enumvalue = Enum.TryParse(object1?.Value, out EnumListValues.LightStatus tmp) 
    ? (object)tmp
    : DBNull.Value;
new SqlParameter("object1param", SqlDbType.Bit).Value = enumvalue; 
//enumvalue is a boxed 0, 1 or DBNull.Value
 

Комментарии:

1. Это, кажется, сработало, я думаю, мне нужно использовать троичную и присвоить переменной enumvalue значение, чтобы получить значение null вместо использования значения tmp, которое, по-видимому, будет равно 0 по умолчанию.