如果我的用户名是Rus7AE,那么我想取数字值,即右边的第三个字符。 T.E. 7.以下代码没有返回值7?
学生A由5-7名学生组成,学生B由8-10名学生组成,学生C由5-10名学生组成,该名为普通组,但不包含来自studentA和studentB的相同值private void authcheck()
{
username = Session["stud"].ToString();
schlName = Session["stuschname"].ToString();
string value = username.ToString();
int groupName = Convert.ToInt32(value[value.Length - 3]);
Session["grpName"] = groupName.ToString();
}
我如何获得第三个值
答案 0 :(得分:3)
您正在尝试将字符转换为数字值,但不会产生预期的结果。
尝试
int groupName = int.Parse(value.Substring(value.Length - 3, 1));
如果您可能会收到非此格式的数据,请改为int.TryParse。
Convert.ToInt32无效,因为它根据当前编码获取字符的实际值并将其转换为字符。例如,
int val = Convert.ToInt32('7');
产量55,即'7'的ASCII或UTF-8代码。
答案 1 :(得分:2)
由于条件错误,您没有获得倒数第三个值
if
5-7
else if
8-10
else if
5-10
在这种情况下,最后一个永远不会被击中
答案 2 :(得分:0)
因为你的组号中可以有“10”(正如我在你的代码中看到的那样),也许还有一些两位数(11,12,13等)我们应该在这里使用正则表达式...
var regex = new Regex(@"\w+(\d+)\w+");
int groupNumber;
var match = regex.Match(subjectString);
if(!match.Success || !match.Groups[1].Success || !int.TryParse(match.Groups[1].Value, out groupNumber))
throw new Exception("Student has no group!?!?");
string groupName = null;
switch(groupNumber){
case 5:
case 6:
case 7:
groupName = "studentA";
break;
case 8:
case 9:
case 10:
groupName = "studentB";
break;
case 1:
case 2:
case 3:
case 4:
groupName = "studentC";
break;
default:
throw new Exception("invalid group number");
}