如何构造这个变量

时间:2013-05-21 15:58:58

标签: c# asp.net-mvc

现在,表单可以为我的布尔字段发送三个值。

false
true
""

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

如何构造此变量,以便如果它是"",它将不会尝试将其转换为布尔值,而是传递null

5 个答案:

答案 0 :(得分:4)

尝试这样做......首先让procedure.needsAuditing Nullable看到Link For More Details For Nullable Type。 然后就这样做......

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

答案 1 :(得分: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);

旁注:你应该考虑使用pascal case属性名。请参阅Property Naming Guidelines

答案 2 :(得分:3)

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

假设needsAuditingbool?

编辑:我执行了if else而不是?因为编译器会抱怨nullbool之间没有转换(这将是返回类型Convert.ToBoolean

答案 3 :(得分:0)

创建一个ModelBinder,它会将您的字符串输入转换为可为空的bool类型。

之后你的方法将如下所示:

void Method(bool? value)
{

}

答案 4 :(得分:0)

procedure.needsAuditing属性分配给以下方法的结果:

    bool? ParseInput(string input)
    {
        int integerInput;
        if (int.TryParse(input, out integerInput))
            return integerInput == 1;
        return null;
    }