这并不是一个真正的问题,如果这是一个愚蠢的问题,我很抱歉,但这只是我好奇的事情。假设我想将字符串参数解析为整数(如果字符串不为空),否则将整数设置为 -1。有没有更好的方法来写这个声明:
int id = context.Request["Id"] == null ? -1 : int.Parse(context.Request["Id"]);
必须评估字符串以查看它是否为空,然后再次评估它以解析它,这似乎很混乱。现在我想了一下,这已经提出了对象并访问对象属性(如果它不为空)。所以类似:
int id = person == null ? -1 : person.id;
这是公认的做法吗?
对于第一个示例,您可以使用 null 合并运算符:
int id = int.Parse(context.Request["Id"] ?? "-1");
对于第二个示例,您可以使用 null 条件运算符:
int id = person?.Id ?? -1;
您没有说明
int.Parse()
是否有可能因非空值而失败,但如果您不确定非空输入字符串将始终是 int
值,您也可以使用 TryParse()
方法:
int id;
if (!int.TryParse(context.Request["Id"], out id)
id = -1;
如果
context.Request["Id"]
为 null,或者无法解析为 int
,则不会引发异常。
就我个人而言,我会发表以下两点声明:
string tmp = context.Request["Id"];
int id = String.IsNullOrWhitespace(tmp) ? -1 : int.Parse(tmp);
这无需任何额外的解析即可处理此问题。在一行中执行此操作将需要额外查找上下文(您试图避免)或额外解析。