-1

ここで、私の使用名がRus7AEの場合、数値、つまり右から3番目の文字を取得します。te 7.次のコードは値7を返しませんか?

StudentAは5〜7番目の標準で構成されますstudentBは8〜10番目の標準で構成されますstudentCは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番目の値を取得するにはどうすればよいですか

4

3 に答える 3

3

文字を数値に変換しようとしていますが、意図した結果が得られません。

試す

int groupName = int.Parse(value.Substring(value.Length - 3, 1));

この形式ではないデータを受け取る可能性がある場合は、代わりにint.TryParseを調べてください。

Convert.ToInt32 は、現在のエンコーディングに基づいて文字の実際の値を取得し、それを文字に変換するため、機能していません。例えば、

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

'7' の ASCII コードまたは UTF-8 コードである 55 を返します。

于 2012-08-27T19:46:30.413 に答える
2

条件が間違っているため、最後から 3 番目の値を取得できません

if
    5-7
else if
    8-10
else if 
    5-10

この場合、最後の 1 つがヒットすることはありません

于 2012-08-27T19:51:38.987 に答える
0

グループ番号に「10」を含めることができるため(コードで見たように)、さらに2桁(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");
}
于 2012-08-27T19:53:11.330 に答える