C# 解析值(如果不为空)

问题描述 投票:0回答:3

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

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

必须评估字符串以查看它是否为空,然后再次评估它以解析它,这似乎很混乱。现在我想了一下,这已经提出了对象并访问对象属性(如果它不为空)。所以类似:

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

这是公认的做法吗?

c# parsing null
3个回答
12
投票

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

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

对于第二个示例,您可以使用 null 条件运算符:

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

3
投票

您没有说明

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

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

如果

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


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.