多个文本框中的重复值

时间:2013-02-15 09:18:39

标签: asp.net performance duplicates

如何验证多个文本框中的文本是否彼此唯一。

在asp.net中看起来像那样但它不是有效的语法

bool hasNoDuplicate = (txtEmergencyName1.Text.Trim() <> txtEmergencyName2.Text.Trim() <> txtEmergencyName3.Text.Trim <> txtEmergencyName4.Text.Trim);

我正在寻找一个有效的appraoch,一种lambda表达式或内置于asp.net

3 个答案:

答案 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变量中设置truefalse

编辑1

     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));

但我不知道性能