Sonntag, Dezember 8, 2019

Die Angabe params für Typ.GetMethod

Ich bin mit der Reflexion, um auf die TryParse-Methode info (upvote für die erste person zu erraten, warum ;).

Wenn ich rufe:

typeof(Int32).GetMethod("Parse",
  BindingFlags.Static | BindingFlags.Public,
  null,
  new Type[] { typeof(string) },
  null);

Bekomme ich eine Methode zurück, sondern erweitert dies leicht:

typeof(Int32).GetMethod("TryParse",
  BindingFlags.Static | BindingFlags.Public,
  null,
  new Type[] { typeof(string), typeof(Int32) },
  null);

Bekomme ich nichts zurück. Mein spidersense sagt mir, es ist, weil der zweite parameter ist ein out-parameter.

Wer weiß, was hab ich falsch gemacht hier?

  • „Wer weiß, was hab ich falsch gemacht hier?“ – ja, mit der spiegelung zu nennen TryParse! 😉
  • Du bist wahrscheinlich versuchen, TryParse einen beliebigen numerischen Typ. Nicht. Convert.ChangeType mit einem catch block wird schneller sein.
  • für die lol.
  • Ja, während der Verwendung von Ausnahmen, die den Programmablauf Steuern ist in der Regel nicht eine gute Praxis, weil der speed-Strafe, Reflexion ist nicht besonders schnell oder. Es ist schwer zu sagen, entweder „richtige“ oder „beste Praxis“. Klar Ihr Anwendungsfall ist nicht standard hier. Und ich bin nicht sehr gut im erraten, warum. Wenn Sie uns sagen, könnten wir in der Lage, einen Vorschlag für eine bessere Lösung.
  • Ich bin immer um die Tatsache, dass es gibt keine solche Sache wie eine Schnittstelle zum darstellen von Typen, die eine TryParse-Methode (so etwas wie ITryParseable), durch staticly sammeln alle die Methode, die infos in einen cache und tun eine Suche in einem generischen TryParse-Methode. E. g. „true“.TryParse<bool>().
  • Ich würde auch behaupten, dass weder „best practice“. Ich könnte eine Vielzahl von if Aussagen tun tryparses basierend auf der Art, ich denke, meine Methode ist ein wenig eleganter, wenn auch einen Hauch langsamer.

InformationsquelleAutor Khanzor | 2010-12-23

2 Kommentare

  1. 41

    Versuchen, diese

    typeof(Int32).GetMethod("TryParse",
      BindingFlags.Static | BindingFlags.Public,
      null,
      new Type[] { typeof(string), typeof(Int32).MakeByRefType() },
      null);
    • Ahh, so ein Typ ref-und out-Typ behandelt werden, die gleiche, in diesem Fall…
    • Ich beachten Sie, dass die MS-Dokumentation und Beispiel für c#, die verwendet die c-syntax für diese. Dein Beispiel funktioniert, Ihr nicht.
  2. 4

    Wie @Jab ‚ s aber ein wenig kürzer:

    var tryParseMethod = typeof(int).GetMethod(nameof(int.TryParse),
                                               new[]
                                               {
                                                   typeof(string),
                                                   typeof(int).MakeByRefType()
                                               });
    
    //use it
    var parameters = new object[] { "1", null };
    var success = (bool)tryParseMethod.Invoke(null, parameters);
    var result = (int)parameters[1];
    • Yep. Beachten Sie, dass nameof() erfordert C# 6.0
    • Die Abstimmung für diese Antwort für die Annahme, nameof anstelle eines string.

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...