C# 无法从c中的字符串中获取右侧的第三个字符#

C# 无法从c中的字符串中获取右侧的第三个字符#,c#,int,C#,Int,这里,如果我的usename是Rus7AE,那么我想取数字值,即右边的第三个字符。t、 e.7。下面的代码没有返回值7 学生A由5-7名std学生组成B由8-10名std学生组成C由5-10名std学生组成,这是普通组,但不包含来自学生A和学生B的相同值 private void authcheck() { username = Session["stud"].ToString(); schlName = Session["stus

这里,如果我的usename是Rus7AE,那么我想取数字值,即右边的第三个字符。t、 e.7。下面的代码没有返回值7


学生A由5-7名std学生组成B由8-10名std学生组成C由5-10名std学生组成,这是普通组,但不包含来自学生A和学生B的相同值

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();
}

如何获取第三个最后一个值

您正在尝试将字符转换为数字值,这将不会给出预期的结果

试一试

如果您可能会收到非此格式的数据,请查看

Convert.ToInt32不工作,因为它根据当前编码获取字符的实际值并将其转换为字符。比如说,

int val = Convert.ToInt32('7');

产生55,这是“7”的ASCII或UTF-8代码。

由于条件错误,无法获得最后三个值

if
    5-7
else if
    8-10
else if 
    5-10
在这种情况下,最后一个将永远不会被击中,因为您的组号中可以有“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");
}

如果子字符串不是数字,则仍将引发异常。他们应该使用TryParse()。可能在您的评论之后添加了这一点。@PeterGluck正确的选择取决于上下文。从OP中不清楚哪一个适合这里。另一方面,
Convert.ToInt32(“7”)
返回
7
我不能说,因为我没有投你反对票。如果只关注引起问题的那一行(您尝试获取数字并将其转换为整数),则可以使问题更清楚。也许是额外的信息导致人们发现问题没有集中注意力。你所说的也是真的,但不是他没有得到“7”的原因。这与所问的问题无关。这应该是一个comment@DavidHeffernan这就是我得到问题的原因,他不能进入最后一个
,否则如果
(第三个)“最后三个值”指的是字符串
末尾的第三个字符。OP声明的问题是“下面的代码没有返回值7”第三种情况下,哪种
groupNames
应该结束?你放在那里的所有数字都与之前的病例相符。学生A由5-7名性病学生组成B由8-10名性病学生组成C由5-10名性病学生组成这是一个常见的群体,但不包含来自学生A和学生B的相同值我不明白你想说什么,但是你的代码不会把任何东西输入到studentC中。@codesin混沌实际上是正确的。。你能告诉我一个方法吗?不,我不能,因为我不明白你想做什么。你能把我的问题投赞成票吗。。因此我不能提出新问题。。先谢谢你。。。
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");
}