首页 新闻 会员 周边 捐助

关于转换类型的疑问

0
[已解决问题] 解决于 2017-08-22 15:21

我想从网址****.aspx?cat=1+2+3+4+5中获得这些数字组成的list.

由QueryString获得cat的值后,再由

复制代码
var catList = new List<int>();
string cat = null;
if
(!string.IsNullOrEmpty(Request.QueryString.Get("cat"))) { cat = Request.QueryString.Get("cat"); string[] str = cat.Split('+'); for (int i = 0; i < str.Length; i++) { if (str[i] != null) { int a = Convert.ToInt32(str[i]); catList.Add(a); } } }
复制代码

却在int a = Convert.ToInt32(cats[i]);时提示“System.FormatException: 输入字符串的格式不正确。

我检查了不是空值,用其他方法读出了的确是数字值。foreach方法也试过了。

请问是什么地方出问题了呢?

Destiny130的主页 Destiny130 | 菜鸟二级 | 园豆:208
提问于:2017-08-21 18:20
< >
分享
最佳答案
0

你这个split是你自己写的么?framework提供的split对于char都是需要接受数组

你可以尝试使用Split的重载传入StringSplitOptions.RemoveEmptyEntries试试,或者你可以在转换那行加个try catch,在catch时看看str[i]是多少

建议在做这种转换时使用int#TryParse这种

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2017-08-21 19:06

 用的就是vs自带的Split啊,断点了一下,发现有两个问题:

1. cat在请求request时就将+转换成了空格。

2. 将Split中参数改为空格后Split也没有起到分割的作用,str[i]的值就是“1 2 3 4 5”

Destiny130 | 园豆:208 (菜鸟二级) | 2017-08-21 20:41

@Destiny130: 你试下在给cat赋值前做一下urlencode

Daniel Cai | 园豆:10424 (专家六级) | 2017-08-22 10:07

@Daniel Cai: 在其他站提问,有人让我这样做了。encode然后decode后分割了。

str[i] 的值就是一个数字2,但还是提示“输入字符串的格式不正确”。

我的解决方法是放弃从url传递值,在App_Code文件夹里添加了一个静态List<int>字段读写值

Destiny130 | 园豆:208 (菜鸟二级) | 2017-08-22 13:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册