2014-05-13 5 views
0

Я создаю приложение ASP.NET MVC4 C#, которое принимает динамические запросы и динамически генерирует виды бритвы.Как преобразовать динамическое нулевое логическое значение в значение false

Приложение использует WebMatrix.Data.Query() для получения данных. Этот метод возвращает IEnumerable<dynamic>. Строки результата могут содержать bool? Тип свойства whise значение null.

Эти значения используются в динамически создаваемых изображениях бритвы с & &, || а также ! операторы. Эти операторы не принимают нулевые булевские значения, в этом случае возникает исключение времени выполнения.

Я ищу способ исправить это. Кажется, что лучший способ - преобразовать динамические логические значения null в значение false.

Я попробовал метод

public static dynamic BooleanNullToFalse(dynamic value) 
    { 
     if (value == null && value is bool?) 
      return false; 
     return value; 
    } 

но получил странную ошибку компиляции

Один или несколько типов, необходимых для компиляции динамического выражения не может быть найдено. Вам не хватает ссылки?

в выражении value == null

Как это исправить, так что код компилируется?

Другой возможностью было бы заставить &&, || и ! логические операторы принимать нулевые значения или определить новые логические операторы, которые принимают нулевые значения. Я не знаю, это возможно/разумно?

+1

Возможно, я плотный, но есть ли причина, по которой ваш метод принимает динамический параметр, а не Nullable ? - похоже, это название говорит о том, что он действует только на Bool? Преобразование ранее, вероятно, значительно повлияет на решение вашей проблемы. –

+3

Имеет ли ваш проект ссылку на Microsoft.CSharp.dll? – CharlesNRice

+0

Если 'value' является' object'/'dynamic', который может поступать только из' bool? ',' Value is bool? 'Является таким же, как' value! = Null' из-за того, как работает бокс. Ваш оператор 'if' никогда не будет оценивать true (как описано). –

ответ

1

Добавьте ссылку Microsoft.CSharp к вашему проекту, и если она уже присутствует, удалите и повторно добавьте ее в соответствии с this comment.

Смежные вопросы