2 Stimmen

Bestimmten Typ von Objekt aus List<T> holen

Ich habe eine Liste von Controls, die in einer List<Control> und ich möchte in der Lage sein, ihren Typ zu überprüfen. Da meine Liste nur Controls enthält, bringt mich typeof() nicht sehr weit, ich möchte in der Lage sein zu fragen, ob List<Control>[0] ist ein Kontrollkästchen, eine Textbox, ein Etikett usw.

Wie kann ich herausfinden, welche Art von Kontrolle ich in meiner Liste habe?

5voto

Justin Niessner Punkte 235353

Sie könnten die Object.GetType() Methode:

var controls = new List<Control>();

// Add Controls

if(controls[0].GetType() == typeof(Checkbox))
{
    // I'm a checkbox
}
else if (controls[0].GetType() == typeof(TextBox))
{
    // I'm a TextBox
}

...und so weiter.

Wenn es Ihnen nichts ausmacht, dass Sie auch Kinder der zu prüfenden Steuerelemente finden, können Sie auch die is Betreiber:

var controls = new List<Control>();

// Add Controls

if(controls[0] is Checkbox)
    // I'm a Checkbox or a child of Checkbox
else if (controls[0] is TextBox)
    // I'm a TextBox or a child of TextBox

3voto

Brian Mains Punkte 50145

Sie können eine Schleife machen:

foreach (var ctl in ControlsList)
{
   if (ctl is CheckBox)
     //Do this
   else if (ctl is TextBox)
     //DoThis
}

Damit erhalten Sie mehr Flexibilität, wenn Sie ITextControl, ICheckBoxControl, IButtonControl verwenden, da diese mehrere Steuerelemente in einer Bedingung zusammenfassen.

Sie können auch LINQ verwenden:

ControlsList.OfType<CheckBox>();
ControlsList.OfType<ICheckBoxControl>();

HTH.

0voto

ripper234 Punkte 211096

Sie möchten GetType() verwenden, um den dynamischen Typ zu ermitteln.

0voto

Tim Robinson Punkte 51702
Control control = list[0]
bool isCheckBox = control is CheckBox;
bool isTextBox = control is TextBox;
bool isLabel = control is Label;

0voto

CodeMonkey1313 Punkte 15085

Etwas andere Implementierung mit Linq, um eine Liste von Steuerelementen für jeden Typ zu erhalten

var checkBoxes = from l in controls 
                 where l.GetType()  is CheckBox 
                 select l;
var textBoxes = from l in controls 
                where l.GetType()  is TextBox 
                select l;
var labels = from l in controls 
             where l.GetType()  is Label 
             select l;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X