C# char.isupper 在将数字放入字符串索引时抛出错误 [关闭]
Posted
技术标签:
【中文标题】C# char.isupper 在将数字放入字符串索引时抛出错误 [关闭]【英文标题】:C# char.isupper throwing error when a number is put in string index [closed] 【发布时间】:2021-07-10 06:38:07 【问题描述】:我正在尝试制作密码验证器,但是当我输入数字时,此代码会抛出 IndexOutOfRangeException
:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Password
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void textBox1_TextChanged(object sender, EventArgs e)
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
string password = textBox1.Text;
if (password.All(c => Char.IsLetterOrDigit(c)))
button4.Text = "✓";
button4.ForeColor = System.Drawing.Color.Black;
button4.BackColor = System.Drawing.Color.Green;
if (password.Length >= 3 && password.Length <= 8)
button1.Text = "✓";
button1.ForeColor = System.Drawing.Color.Black;
button1.BackColor = System.Drawing.Color.Green;
if (password.Any(char.IsDigit))
button2.Text = "✓";
button2.ForeColor = System.Drawing.Color.Black;
button2.BackColor = System.Drawing.Color.Green;
// Error thrown below when I input a number
if (char.IsUpper(password[0]) && (char.IsLower(password[8])))
label1.Text = " Valid";
label1.ForeColor = System.Drawing.Color.Green;
button3.Text = "✓";
button3.ForeColor = System.Drawing.Color.Black;
button3.BackColor = System.Drawing.Color.Green;
else
label1.Text = " Invalid";
label1.ForeColor = System.Drawing.Color.DarkRed;
button2.Text = "✖";
button2.ForeColor = System.Drawing.Color.Black;
button2.BackColor = System.Drawing.Color.DarkRed;
else
label1.Text = " Invalid";
label1.ForeColor = System.Drawing.Color.DarkRed;
button3.Text = "✖";
button3.ForeColor = System.Drawing.Color.Black;
button3.BackColor = System.Drawing.Color.DarkRed;
else
label1.Text = " Invalid";
label1.ForeColor = System.Drawing.Color.DarkRed;
button1.Text = "✖";
button1.ForeColor = System.Drawing.Color.Black;
button1.BackColor = System.Drawing.Color.DarkRed;
else
button4.Text = "✖";
button4.ForeColor = System.Drawing.Color.Black;
button4.BackColor = System.Drawing.Color.DarkRed;
【问题讨论】:
你能分享更多关于你的代码的细节吗?你在哪里定义了password
变量?它来自哪里?
不可复制dotnetfiddle.net/Ki2Zql
您的输入字符串至少有 9 个字符长吗?否则,当您尝试访问 password[8]
时,您会得到一个 IndexOutOfRangeException
你得到什么错误,哪一行抛出它?
@Rafalon 这是我得到的例外(密码必须是 3-8 个字母长)你能详细说明这个错误的含义吗,我不明白
【参考方案1】:
只是为了让您了解您遇到此问题的原因,代码的相关部分:
您检查您的密码是否严格短于 9 个字符: if (password.Length >= 3 && password.Length <= 8)
您检查您的密码是否包含数字:
if (password.Any(char.IsDigit))
您尝试访问 无法 访问的 password[8]
(因为它是第 9 个字符,password[0]
是第一个字符),因此您的例外:
if (char.IsUpper(password[0]) && (char.IsLower(password[8])))
简而言之:
您收到IndexOutOfRangeException
是因为您尝试访问仅包含 3 到 8 个字符的字符串的第 9 个字符。 (第三个if
)
只有当您的输入包含数字时才会出现此异常,因为当您的输入包含数字时,您只会尝试访问第 9 个字符。 (第二个if
)
如果您需要检查长度可变的字符串的最后一个字符,请不要像以前那样对索引进行硬编码。
您可以使用password[password.Length-1]
获取最后一个字符。
【讨论】:
是的,但是只有当我在字符串上输入数字时才会发生这种情况 因为你只有在password.Any(char.IsDigit)
(这个代码示例中的第二个if
)时才输入这个
那么我该如何解决这个问题?
为什么要检查 3 到 8 个字符的长字符串的第 9 个字符?
查看我更新答案的最后一部分(不要对索引进行硬编码,您需要最后一个字符,然后使用为您提供最后一个字符的公式)以上是关于C# char.isupper 在将数字放入字符串索引时抛出错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
我在将字符串从 .txt 文件添加到列表时遇到问题,即使在尝试使用 .append 之后也是如此
在将 HTML 字符串发送到客户端之前格式化 HTML 字符串的 C# 工具[关闭]