Wie Sie auf suchen, wenn ein Objekt über eine Eigenschaft mit einem Wert von C#

Ich würde gerne eine Funktion erstellen, wo ich kann in ein beliebiges Objekt und überprüfen, um zu sehen, ob es eine bestimmte Eigenschaft mit einem bestimmten Wert. Im Versuch, dies zu tun mit Reflexion, aber die Reflexion immer noch verwirrt mich ein wenig. Ich hatte gehofft, dass jemand vielleicht in der Lage sein zu zeigen Sie mich in die richtige Richtung.

hier ist der code, den ich versuche, aber offensichtlich das es nicht funktioniert:

    public static bool PropertyHasValue(object obj, string propertyName, string propertyValue)
{
    try
    {
        if(obj.GetType().GetProperty(propertyName,BindingFlags.Instance).GetValue(obj, null).ToString() == propertyValue)
        {
            Debug.Log (obj.GetType().FullName + "Has the Value" + propertyValue);
            return true;    
        }

        Debug.Log ("No property with this value");
        return false;
    }
    catch
    {
        Debug.Log ("This object doesnt have this property");
        return false;
    }

}
  • Was "funktioniert nicht"? Sind Sie immer Fehler?
  • Wenn ich den pass in ein Objekt, das ich kenne, hat sowohl die Eigenschaft und den Wert, es gibt meiner Debug.Log in der catch-Anweisung, egal was.
  • Anstatt nur Druck aus, dass es ein Fehler war, Sie sollte eigentlich fangen die spezifischen execption und protokollieren Sie die details der Ausnahme, so dass Sie wissen, was falsch gelaufen ist (oder besser noch, nicht die Ausnahme abfangen, wenn Sie nicht richtig damit umgehen).
  • Es stellt sich heraus, dass ich fehlte eine verbindliche Flagge, ich warte auf die ersten 7 Minuten sein, damit ich das akzeptieren kann, die richtige Antwort. Vielen Dank An Alle!
  • Nur ein FYI, wenn Sie versuchen zu finden, nicht-öffentlichen Eigenschaften für eine sichere Laufzeitumgebung (z.B. Silverlight), den Sie nicht bekommen keine. Auch mit der Reflexion, die Silverlight-runtime verhindert, dass Sie von grabbing non-public-Mitglieder.
  • Nur so nebenbei - finden Sie in dieser MSDN-Seite über wie fangen bestimmte exception-Typen in einer Weise, die Sie, um zu sehen, eine Fehlermeldung - es scheint Sie nicht vertraut sind mit diesem Konzept. msdn.microsoft.com/en-us/library/0yd65esw(v=vs. 100).aspx
  • Intead fangen alle Arten von Ausnahmen, die Sie möglicherweise verwenden möchten GetProperties und Suche in der Ausgabe zu sehen, ob es mit dem gewünschten Namen. Sie könnte verwenden von Linq für die.
  • Oder noch besser: fahren Sie mit GetProperty, aber überprüfen, ob seine Ausgabe ist null (die Eigenschaft wurde nicht gefunden) oder eine PropertyInfo Instanz.
  • In diesem Fall habe ich nicht die Sorge um die Ausnahme, ich wusste, dass wenn ich erhielt eine null-Verweis-Ausnahme, das war, weil das Objekt nicht über diese Eigenschaft. Die try-Anweisung ist nur ein Versuch, ignorieren Sie es einfach, wenn das passiert und bewegen sich mit seinem Leben. Ich meistens halten Sie es in meinem Beispiel in einem Versuch, Ihnen zu zeigen, Jungs, was war in meinem Kopf, während ich dies Schreibe.
  • Ich mag die Idee, werde ich testen, dass statt meiner try-catch.
  • abfangen von Ausnahmen ist nicht die richtige Art zu tun, flow control. Es ist unglaublich langsam. Siehe hierzu: msdn.microsoft.com/en-us/library/seyhszts(v=vs. 100).aspx

Schreibe einen Kommentar