#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 по умолчанию.