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