Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#拆分动态数组_C#_Split - Fatal编程技术网

c#拆分动态数组

c#拆分动态数组,c#,split,C#,Split,今天我提出了这样一个要求 我在一个类中定义了五个地址参数,但五个地址可能为空或有值 五个地址在数据库中存储一个字段,如下所示(email1;email2;…) 当存储数据库时,我需要在页面中获得五个文本框,以便在地址中添加“:”,这样就可以了 那个么问题是,当我从数据库中获取数据并在页面的五个文本框中显示值时 若地址有值,则显示带有五个文本框的页面。无数据,显示为空 那么,如何将动态电子邮件列表解析为五个文本框 string [] emailList = sourceEmail.split(‘;

今天我提出了这样一个要求

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

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

当存储数据库时,我需要在页面中获得五个文本框,以便在地址中添加“:”,这样就可以了

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

若地址有值,则显示带有五个文本框的页面。无数据,显示为空

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

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];
}
我认为这不是一个好办法。 有人能帮我做这个吗?

来一个循环怎么样

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
    }
}
string[]emailList=sourceEmail.Split(“;”);
for(int i=0;i
您可以通过反射做得更好,但这需要自己付出代价。

只做一个循环怎么样

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
    }
}
string[]emailList=sourceEmail.Split(“;”);
for(int i=0;i

通过反射,您可以做得更好,但这需要自己承担费用。

将文本框添加到FormLoad或其他地方的列表中

    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];
        }
    }
void OnFormLoad(对象发送方,事件参数e)
{
List texboxesWithEmail=新列表{textBox1、textBox2、textBox3、textBox4、textBox5};
字符串[]电子邮件=新字符串[]{”test@test.test", "...." };
将电子邮件放入邮箱(电子邮件、文本框和邮件);
}
作废PutEmailSintexbox(字符串[]电子邮件,列表文本框)
{
如果(emails.Count()!=textboxs.Count)返回;
对于(var i=0;i
在FormLoad或其他地方的列表中添加文本框

    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];
        }
    }
void OnFormLoad(对象发送方,事件参数e)
{
List texboxesWithEmail=新列表{textBox1、textBox2、textBox3、textBox4、textBox5};
字符串[]电子邮件=新字符串[]{”test@test.test", "...." };
将电子邮件放入邮箱(电子邮件、文本框和邮件);
}
作废PutEmailSintexbox(字符串[]电子邮件,列表文本框)
{
如果(emails.Count()!=textboxs.Count)返回;
对于(var i=0;i
您可能需要使用ControlCollection来识别文本框

因此,您可以使用该键找到您选择的控件(在您的示例中是名为emailx的文本框)。追加循环的索引以完成循环中的键名。你就完了。您不必对现有代码进行任何更改

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

for (int i = 0; i < emailList.Length; i++) {
    this.Controls("email" + i).Text = emailList[i];
}
string[]emailList=sourceEmail.split(“;”);
for(int i=0;i
您可能需要使用ControlCollection来识别文本框

因此,您可以使用该键找到您选择的控件(在您的示例中是名为emailx的文本框)。追加循环的索引以完成循环中的键名。你就完了。您不必对现有代码进行任何更改

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

for (int i = 0; i < emailList.Length; i++) {
    this.Controls("email" + i).Text = emailList[i];
}
string[]emailList=sourceEmail.split(“;”);
for(int i=0;i
我认为主要的问题是,您的类中将这五个地址作为单独的字段/属性。通过这种方式,您无法灵活地设置,例如,如果没有像您发布的那样冗长的
if
块或诉诸于反射(对于您这样的简单案例来说,这是一个荒谬的想法),则只能设置其中的三个

我建议将这些电子邮件存储在
列表中。这样,您就可以拥有一个长度灵活的集合,并且可以使用
for
while
轻松循环,而无需借助开关。将您的
email0
email
email2
等更改为单个
列表电子邮件
。然后你可以做:

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

如果您不能或不想更改您的类,那么AstralisSomnium或Sriram Sakthivel的解决方案将是好的。

我认为主要的问题是,您的类中将这五个地址作为单独的字段/属性。通过这种方式,您无法灵活地设置,例如,如果没有像您发布的那样冗长的
if
块或诉诸于反射(对于您这样的简单案例来说,这是一个荒谬的想法),则只能设置其中的三个

我建议将这些电子邮件存储在
列表中。这样,您就可以拥有一个长度灵活的集合,并且可以使用
for
while
轻松循环,而无需借助开关。将您的
email0
email
email2
等更改为单个
列表电子邮件
。然后你可以做:

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

如果您不能或不想更改您的类,那么AstralisSomnium或Sriram Sakthivel的解决方案将是很好的。

只需检查
emailList.Length
并相应地采取行动…哦,顺便说一句,
五个地址在数据库中存储一个字段,就像这样(email1;email2;…)
这是您不应该做的。阅读数据库规范化。哈哈,我做了一个enh