3

这不是一个真正的问题,如果这是一个愚蠢的问题,我很抱歉,但这只是我很好奇的事情。假设如果字符串不为空,我想将字符串参数解析为整数,否则将整数设置为-1。有没有更好的方法来写这个语句:

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

必须评估字符串以查看它是否为空,然后再次评估它以解析它,这似乎很麻烦。现在我想了想,这已经提出了对象并在它不为空时访问对象属性。所以像:

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

这是公认的做法吗?

4

3 回答 3

12

对于您的第一个示例,您可以使用空合并运算符

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

如果存在null 安全解除引用运算符,则可以改进第二个示例, 但由于它在 C# 中不存在,因此您的方法很好:

int id = person == null ? -1 : person.Id;
于 2012-07-30T19:47:13.547 回答
3

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

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

如果context.Request["Id"]为 null 或无法解析为 ,则不会引发异常int

于 2012-07-30T19:54:35.017 回答
1

就个人而言,我会发表以下两个声明:

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

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

于 2012-07-30T19:51:30.253 回答