1

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

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

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

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

4

3 回答 3

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. 通过在当前文本框之前跳过所有内容,您可以避免两次检查文本框。

如果所有相关TextBoxes都在一个容器控件中,如 a Panel,您还可以使用Enumerable.OfType来查找它们:

IEnumerable<TextBox> allTxt = this.EmergencyPanel.Controls.OfType<TextBox>();

旁注:无论如何,寻找最有效的方法来验证某些控件是过早的优化。这不是你一直在做的事情,也从来没有数以百万计的控制。相反,您应该寻找最短或最易读的方法。

于 2013-02-15T09:26:06.740 回答
0

您可以相应地使用and &&oror ||运算符

bool isDuplicate=(txtEmergencyName1.Text.Trim() == txtEmergencyName2.Text.Trim() 
                       && txtEmergencyName2.Text.Trim() == txtEmergencyName3.Text.Trim);

它将设置truefalse在 isDuplicate 变量中。

编辑 1

     bool isDuplicate=(txtEmergencyName1.Text.Trim() == txtEmergencyName2.Text.Trim() 
                       && txtEmergencyName2.Text.Trim() == txtEmergencyName3.Text.Trim
                       && txtEmergencyName1.Text.Trim() == txtEmergencyName3.Text.Trim
                     );
于 2013-02-15T09:21:18.653 回答
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));

但我不知道性能

于 2013-02-15T10:42:40.990 回答