如何验证多个文本框中的文本是否彼此唯一。
它在 asp.net 中看起来像这样,但它不是有效的语法
bool hasNoDuplicate = (txtEmergencyName1.Text.Trim() <> txtEmergencyName2.Text.Trim() <> txtEmergencyName3.Text.Trim <> txtEmergencyName4.Text.Trim);
我正在寻找一种有效的方法,一种 lambda 表达式或内置在 asp.net
如何验证多个文本框中的文本是否彼此唯一。
它在 asp.net 中看起来像这样,但它不是有效的语法
bool hasNoDuplicate = (txtEmergencyName1.Text.Trim() <> txtEmergencyName2.Text.Trim() <> txtEmergencyName3.Text.Trim <> txtEmergencyName4.Text.Trim);
我正在寻找一种有效的方法,一种 lambda 表达式或内置在 asp.net
由于您要求使用 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>();
旁注:无论如何,寻找最有效的方法来验证某些控件是过早的优化。这不是你一直在做的事情,也从来没有数以百万计的控制。相反,您应该寻找最短或最易读的方法。
您可以相应地使用and &&
oror ||
运算符
bool isDuplicate=(txtEmergencyName1.Text.Trim() == txtEmergencyName2.Text.Trim()
&& txtEmergencyName2.Text.Trim() == txtEmergencyName3.Text.Trim);
它将设置true
或false
在 isDuplicate 变量中。
bool isDuplicate=(txtEmergencyName1.Text.Trim() == txtEmergencyName2.Text.Trim()
&& txtEmergencyName2.Text.Trim() == txtEmergencyName3.Text.Trim
&& txtEmergencyName1.Text.Trim() == txtEmergencyName3.Text.Trim
);
你也可以做类似的事情
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));
但我不知道性能