1

複数のテキストボックス内のテキストが互いに一意であるかどうかを検証する方法。

asp.netではそのように見えますが、有効な構文ではありません

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

効率的なアプローチ、一種のラムダ式、またはasp.netに組み込まれているものを探しています

4

3 に答える 3

3

ラムダを求めているので、ここに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を2回チェックすることを回避できます。

関連するすべてTextBoxesがのようなコンテナコントロールにある場合は、それらを見つけるためにPanel使用することもできます。Enumerable.OfType

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

補足:とにかく、いくつかのコントロールを検証するための最もパフォーマンスの高い方法を探すのは時期尚早の最適化です。これはあなたが常に行っていることではなく、何百万ものコントロールが存在することはありません。代わりに、最短または最も読みやすいアプローチを探す必要があります。

于 2013-02-15T09:26:06.740 に答える
0

and &&それに応じてまたはor ||演算子 を使用できます

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

trueまたはfalseisDuplicate変数に設定されます。

編集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 に答える