这是一个不是真正问题的东西,如果这是一个愚蠢的问题,我道歉,但这只是我很好奇的事情。假设我想将字符串参数解析为整数(如果字符串不为null),否则将整数设置为-1。有没有更好的方式来写这个陈述:
int id = context.Request["Id"] == null ? -1 : int.Parse(context.Request["Id"]);
必须评估字符串以查看它是否为null然后再次对其进行求解以解析它似乎很麻烦。现在我考虑一下,如果对象属性不为null,它就会产生对象并访问对象属性。如下所示:
int id = person == null ? -1 : person.id;
这是公认的做法吗?
答案 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);
无需任何额外解析即可处理此问题。在一行中执行此操作将需要额外查找上下文(您试图避免)或额外解析。