没有从c#中的字符串中获取第三个字符

时间:2012-08-27 19:42:42

标签: c# int

如果我的用户名是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();
}

我如何获得第三个值

3 个答案:

答案 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");
}