IndexOutOfRangeException:索引超出了数组的范围

时间:2014-01-08 21:01:24

标签: asp.net c#-4.0

尝试在AD中删除域名时出错。这是我的代码:

        string strAccount = HttpContext.Current.User.Identity.Name.ToString();
        string strUserName = strAccount.Split("\\\\".ToCharArray())[1];
        txtStrName.Text = strUserName;

        string selectSQL = "SELECT sAMAccountName, mail FROM ActiveDirectories WHERE mail Is Not Null and sAMAccountName = '" + txtStrName.Text + "'";
        SqlConnection con = new SqlConnection(connString);
        SqlCommand cmd = new SqlCommand(selectSQL, con);
        SqlDataReader reader = default(SqlDataReader);
        try
        {
            con.Open();
            reader = cmd.ExecuteReader();
            reader.Read();


            txtADName.Text = reader["sAMAccountName"].ToString();
            txtEmail.Text = reader["mail"].ToString();
        }
        finally
        {
            reader.Close();
            con.Close();
        }

这似乎是我在做分裂的地方。我无法弄清楚这一点。请有人帮忙吗。谢谢!

4 个答案:

答案 0 :(得分:2)

为什么不只是"\\"而不是"\\\\"?看起来你正在分裂2个反斜杠,它应该只有一个。

此外,在尝试解决第二项之前,请确保结果数组中有多个项目。

答案 1 :(得分:1)

HttpContext.Current.User.Identity.Name可能不包含“\”char?

答案 2 :(得分:0)

您可以访问拆分中的第二项。你确定你不是指[0]? 你应该检查它是否有任何元素。

var elements = strAccount.Split("\\\\".ToCharArray());
var strUserName = elements.Count() > 1 ? elements[1] : "";

答案 3 :(得分:0)

假设您的strAccount始终保证看起来像“域\用户”,您的拆分应如下所示:

string strUserName = strAccount.Split('\\')[1];

您可以使用Linq速记检查分割的所需部分(如BartVG指出的那样):

string strUserName = strAccount.Split('\\').Last();

只会返回strAccount的值,以防它不包含预期的分隔符char。