如何验证多个文本框中的文本是否彼此唯一。
在asp.net中看起来像那样但它不是有效的语法
bool hasNoDuplicate = (txtEmergencyName1.Text.Trim() <> txtEmergencyName2.Text.Trim() <> txtEmergencyName3.Text.Trim <> txtEmergencyName4.Text.Trim);
我正在寻找一个有效的appraoch,一种lambda表达式或内置于asp.net
答案 0 :(得分:3)
既然你要求lambda,这是一个linq方法。
var allTxt = new[] { txtEmergencyName1, txtEmergencyName2, txtEmergencyName3, txtEmergencyName4 };
var allText = allTxt.Select((txt, i) => new { Text = txt.Text.Trim(), Pos = i + 1 }).ToList();
bool hasNoDuplicate = !allText.Any(t => allText.Skip(t.Pos).Any(t2 => t.Text == t2.Text));
将所有相关的TextBox放在类似于数组的集合中,并使用Enumerable.Any
。通过在当前文本框之前跳过所有文本框,您可以避免两次检查TextBox。
如果所有相关的TextBoxes
都在Panel
之类的容器控件中,您还可以使用Enumerable.OfType
来查找它们:
IEnumerable<TextBox> allTxt = this.EmergencyPanel.Controls.OfType<TextBox>();
旁注:无论如何都要过早优化以寻找最有效的方法来验证某些控件。这不是你经常做的事情,而且从来没有数以百万计的控制。相反,你应该寻找最短或最易读的方法。
答案 1 :(得分:0)
您可以相应地使用and &&
或or ||
运算符
bool isDuplicate=(txtEmergencyName1.Text.Trim() == txtEmergencyName2.Text.Trim()
&& txtEmergencyName2.Text.Trim() == txtEmergencyName3.Text.Trim);
它会在isDuplicate变量中设置true
或false
。
bool isDuplicate=(txtEmergencyName1.Text.Trim() == txtEmergencyName2.Text.Trim()
&& txtEmergencyName2.Text.Trim() == txtEmergencyName3.Text.Trim
&& txtEmergencyName1.Text.Trim() == txtEmergencyName3.Text.Trim
);
答案 2 :(得分:0)
您也可以执行类似
的操作 var test = new TextBox();
var AlltBox = new List<TextBox>() { new TextBox() };
for(int i=1; i == 5;i++)
AlltBox.Add((TextBox)this.FindName("txtEmergencyName"+i));
bool exist = AlltBox.Any(tb => ((tb.Text == test.Text)&& tb.Name != test.Name));
但我不知道性能