c#拆分动态数组

时间:2013-11-26 07:33:55

标签: c# split

今天我发了这样的请求。

我在一个类中定义了五个地址参数,但是五个地址可能为空或有值。

五个地址存储数据库中的一个字段,如下所示(email1; email2; ....)

何时存储数据库,我需要在页面中获取五个文本框以popludate地址添加“:”,这没关系。

然后问题是,当我从数据库获取数据并在页面中的五个文本框中显示值时。

如果地址有价值,则显示包含五个文本框的页面。没有数据,显示为空。

那么,如何将动态电子邮件列表解析为五个文本框。

string [] emailList = sourceEmail.split(‘;’);
    foreach(string email in emailList)
    {
    this.email0 =?
    this.email1=?
    this.email2=?
    .......
    }

我知道这不起作用,因为我们不知道emailList有多少价值。

我知道一种方法可行,但似乎不太好。

string [] emailList =sourceEmail.Split(';');
if(emailList.length ==1)
{
this.email0 = emailList[0];
}
if(emailList.length==2)
{
this.email0 = emailList[0];
this.email1 = emailList[1];
}

if(emailList.length==3)
{
this.email0 = emailList[0];
this.email1 = emailList[1];
this.email2 = emailList[2];
}

我认为这不是一个好方法。 有人可以帮我吗?

4 个答案:

答案 0 :(得分:2)

在FormLoad或其他地方的List中添加TextBox。

    void OnFormLoad(Object sender, EventArgs e)
    {
        List<TextBox> texboxesWithEmail = new List<TextBox> { textBox1, textBox2, textBox3, textBox4, textBox5 };
        string[] emails = new string[] { "test@test.test", "...." };
        PutEmailsInTexboxes(emails, texboxesWithEmail);
    }
    void PutEmailsInTexboxes(string[] emails, List<TextBox> textBoxes)
    {
        if (emails.Count() != textBoxes.Count) return;
        for (var i = 0; i < emails.Count(); i++)
        {
            textBoxes[i].Text = emails[i];
        }
    }

答案 1 :(得分:1)

只是一个循环呢?

string [] emailList = sourceEmail.Split(';');

for (int i = 0; i < emailList.Length; i++)
{
    switch (i)
    {
        case 0:
            this.email0 = emailList[i];
            break;
        case 1:
            this.email1 = emailList[i];
            break;
       ....//Do it for all variables
    }
}

你可以通过反思来做得更好,但这需要自费。

答案 2 :(得分:1)

您可能希望使用ControlCollection来标识文本框。

  

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection(v=vs.110).aspx

因此,您可以使用密钥找到您选择的控件(在您的情况下,名为emailx的文本框)。附加循环索引以完成循环中的键名称。你完成了。而且您不必对现有代码进行任何更改。

string[] emailList = sourceEmail.split(';');

for (int i = 0; i < emailList.Length; i++) {
    this.Controls("email" + i).Text = emailList[i];
}

答案 3 :(得分:1)

我认为主要的问题是你在课堂上将这五个地址作为单独的字段/属性。这样你就不能灵活地设置,例如只有三个没有像你发布的那样冗长的if块,或者采用反射,这对于像你这样的简单案例来说是一个荒谬的想法。

我建议将这些电子邮件存储在List中。通过这种方式,您可以拥有灵活长度的集合,并且可以轻松使用forwhile循环,而无需使用开关。将您的email0emailemail2等更改为单个List<string> emails。然后你可以这样做:

for (int i = 0; i < emailList.Length; i++)
{
    this.emails[i] = emailList[i];
}

如果你不能或不想改变你的课程,那么AstralisSomnium或Sriram Sakthivel的解决方案就会很好。