C#解析值,如果不为null

时间:2012-07-30 19:46:08

标签: c# parsing null

这是一个不是真正问题的东西,如果这是一个愚蠢的问题,我道歉,但这只是我很好奇的事情。假设我想将字符串参数解析为整数(如果字符串不为null),否则将整数设置为-1。有没有更好的方式来写这个陈述:

int id = context.Request["Id"] == null ? -1 : int.Parse(context.Request["Id"]);

必须评估字符串以查看它是否为null然后再次对其进行求解以解析它似乎很麻烦。现在我考虑一下,如果对象属性不为null,它就会产生对象并访问对象属性。如下所示:

int id = person == null ? -1 : person.id;

这是公认的做法吗?

3 个答案:

答案 0 :(得分:11)

对于您的第一个示例,您可以使用null coalescing operator

int id = int.Parse(context.Request["Id"] ?? "-1");

如果存在null-safe dereferencing operator,可以改进第二个例子,但由于它在C#中不存在,你的方法很好:

int id = person == null ? -1 : person.Id;

答案 1 :(得分:2)

您没有说明int.Parse()是否有可能因非空值而失败,但如果您不确定非空输入字符串将始终为int值,则也可以使用TryParse()方法:

int id;
if (!int.TryParse(context.Request["Id"], out id)
    id = -1;

如果context.Request["Id"]为空,或者int无法解析,则不会抛出异常。

答案 2 :(得分:1)

就个人而言,我会做出这两个陈述:

string tmp = context.Request["Id"];
int id = String.IsNullOrWhitespace(tmp) ? -1 : int.Parse(tmp);

无需任何额外解析即可处理此问题。在一行中执行此操作将需要额外查找上下文(您试图避免)或额外解析。