2

我在 ASP.NET C# 中获取一个查询字符串数据,我需要它的字符串值和它的 int.Parse 值(如果可以解析的话)。(在示例中,我跳过检查空值,因为它对我的问题没有影响)

value = Request.QueryString["value"];
id = int.TryParse(Request.QueryString["value"], out id) 

上面的代码可以满足我的需要,但我只是很好奇我是否可以用一句话来写它,所以我尝试了这个:

if (int.TryParse(Request.QueryString["value"], out id))) value=Request.QueryString["value"];

在这种情况下,如果无法解析字符串值,我不会得到它,但我会得到它的解析值。

有什么建议么?我的代码没有问题我只是出于好奇而询问是否可以在单行代码中完成。

4

6 回答 6

4

几乎单线版本将是

// id and value still need to be defined, of course!
int.TryParse(value = Request.QueryString["value"], out id)

您的代码不应该工作:如果id是,int它将无法阻止bool来自TryParse.

于 2013-10-08T15:37:43.003 回答
4

你可以这样,

 int id;
 string value = int.TryParse(Request.QueryString["value"], out id)) ? Request.QueryString["value"] : null;
于 2013-10-08T15:36:23.950 回答
4

C# 7.0(于 17 年 3 月发布)支持内联输出变量

var value = int.TryParse(Request.QueryString["value"], out int id) ? Request.QueryString["value"] : null;

id(输出变量)将包含解析值或默认值(int)

于 2017-08-23T12:01:09.947 回答
0

You cant declare it all on one line, but if you have multiple int variables you could delclare them all on one line.

Note: if int.TryParse fails is actually sets the out parameter to 0, with out parameters it needs to be assigned before leaving the method so I guess this is why.

eg:

private void test()
{
    int id, id2, id3 = int.MinValue;

    string value1 = int.TryParse(Request.QueryString["value1"].ToString(), out id) ? Request.QueryString["value1"].ToString() : null;
    string value2 = int.TryParse(Request.QueryString["value2"].ToString(), out id2) ? Request.QueryString["value2"].ToString() : null;
    string value3 = int.TryParse(Request.QueryString["value3"].ToString(), out id3) ? Request.QueryString["value3"].ToString() : null;
}
于 2013-10-08T15:50:09.533 回答
0

不,你不(不想)在条件句中做作业。

此外,如果您将其分配给value那么您应该利用value效率。

value = Request.QueryString["value"];
id = int.TryParse(value, out id)

最后,你确定id?您将它分配给 TryParse 的布尔返回,但也将输出分配给它。我认为您的代码不正确,尽管您说它很好。

我会假设你的意思是这样做:

var value = Request.QueryString["value"];
int id = -1;
if(int.TryParse(value, out id))
     /* Do work here */
于 2013-10-08T15:37:31.280 回答
0

如果我们将 Alex 的答案更改为使用out int id,我们甚至不需要id在单独的行中声明。

int.TryParse(value = Request.QueryString["value"], out int id);
于 2021-06-03T13:33:21.410 回答