2013-05-21 3 views
0

В настоящее время форма может отправлять мне три значения для моих логических полей.Как структурировать эту переменную

false 
true 
"" 

procedure.needsAuditing = Convert.ToBoolean(collection["needsAuditing"]); 

Как I структуре этой переменной, так что если это "" он не будет пытаться преобразовать его в логическое, но вместо того, чтобы пройти null?

ответ

4

Если вы хотите, третье состояние для bool, который указывает не определен (null), вы можете использовать Nullable<bool>.

Так изменить свойство:

public bool? needsAuditing{ get; set; } 

и назначить его таким образом:

object needsAuditing = collection["needsAuditing"]; 
if(needsAuditing == null) 
    procedure.needsAuditing = (bool?) null; 
else 
    procedure.needsAuditing = Convert.ToBoolean(needsAuditing); 

Side-примечание: вы должны рассмотреть возможность использования Паскаля propertynames регистра. См. Property Naming Guidelines.

+0

Любой способ консолидировать это? Моя модель настроена так. 'public bool needsAuditing {get; задавать; } '. У меня около 5 из этих полей, и я бы не хотел добавлять 20 строк кода. –

+0

@JamesWilson: Итак, какой тип 'collection' и что возвращает его indexer? Действительно ли это объективно и почему, не можете ли вы использовать строго типизированную коллекцию? –

+0

collect - это FormCollection. –

4

Попробуйте вот так ... сначала сделайте procedure.needsAuditing Nullable см. Это Link For More Details For Nullable Type. затем сделать это так ...

bool? c; 
    procedure.needsAuditing =collection["needsAuditing"]==""? c=null: Convert.ToBoolean(collection["needsAuditing"]); 
+0

Это было один я искал, спасибо. Мне нравится все это на одной линии, если это возможно. –

+0

@JamesWilson welcome –

+0

Это работает? Я получаю «нет никакого неявного преобразования между« null »и« bool ». –

3
if(string.IsNullOrEmpty(collection["needsAuditing"].ToString()) 
    procedure.needsAuditing = null; 
else 
    procedure.needsAuditing = Convert.ToBoolean(collection["needsAuditing"]); 

Предполагая needsAuditing является bool?

Edit: я сделал if else вместо ?, потому что компилятор будет жаловаться, что нет никакого преобразования между null и bool (который будет возвратным типом Convert.ToBoolean)

0

Создать ModelBinder, который преобразует ваш ввод строки в значение NULL bool.

Ваш метод после того, как будет выглядеть так:

void Method(bool? value) 
{ 

} 
0

Назначает procedure.needsAuditing свойства результата следующего способа:

bool? ParseInput(string input) 
    { 
     int integerInput; 
     if (int.TryParse(input, out integerInput)) 
      return integerInput == 1; 
     return null; 
    } 
Смежные вопросы