Как вы уже указали, эта строка вызывает проблему:
if (dr.Table.Columns.Contains("Col1") && (bool)dr["Col1"] == true)
Явное приведение dr["Col1"]
к bool
не выполняется, поскольку значение не являетсябулево . Явное приведение завершается неудачно.
Если предположить, что dr["Col1"]
действительно содержит bool
, но не всегда, вы можете проверить его тип перед преобразованием, используя синтаксис, подобный следующему:
dr["Col1"] is bool myValue && myValue == true
Приведенный выше код подтвердил, что dr["Col1"]
является bool
, а затем определил myValue
как это bool
значение.
Код может стать еще чище, удалив myValue == true
и просто имея myValue
(каконо будет оценено как true
или false
). В указанном вами коде:
if (dr.Table.Columns.Contains(""Col1"") && dr[""Col1""] is bool myValue && myValue)
Если dr["Col1"]
на самом деле не содержит bool
, но на самом деле содержит int
или что-то еще в качестве индикатора значения, являющегося истиннымвам нужно будет реализовать другую логику.