首页 > 解决方案 > 发生“System.ArgumentOutOfRangeException”类型的未处理异常

问题描述

此代码应该将电子邮件解析为用户名和域名。如果我输入 apa@gmail.com,则会显示一个消息框并显示“用户名:apa 域名:gmail.com”。我改编了教科书中的代码,并在 和 处不断收到上述错误email = Email.Remove(0, 1);消息domainName = Email.Remove(Email.Length -1, 1)。有什么建议么?

public partial class StringHandling : Form
{
    string email = "";
    string state = "";
    string city = "";
    int zipCode = 0;

    public StringHandling()
    {
        InitializeComponent();
    }

    private void btnParse_Click(object sender, EventArgs e)
    {
        string Email = "";
        string domainName = "";
        email = txtEmail.Text;
        email = Email.Trim();
        if (email.StartsWith(""))
            email = Email.Remove(0, 1);
        if (email.EndsWith("@"))
            domainName = Email.Remove(Email.Length - 1, 1);

        MessageBox.Show("Username: " + email + "\n" + "Domain Name: " + domainName);

标签: c#

解决方案


email.StartsWith("")将永远是真的(你实际上并没有指定电子邮件应该以什么开头)。由于它总是以空字符串开头,因此当您尝试调用email = Email.Remove(0, 1);. 您正在尝试删除第一个字符,并且由于字符串为空,因此没有第一个字符(字符串总长度为 0),因此您得到了该异常。

我的建议:避免使用不同大小写的多个变量(即电子邮件和电子邮件)。这导致了一些混乱。Email这些是 2 个单独的变量,并且您从未为(Capitol E)分配任何内容,因此在 , 的情况下email = Email.Remove(0, 1);Email将始终为空字符串并引发此错误。


推荐阅读