C# - variable Länge args, was ist besser und warum: __arglist, params array oder ein Dictionary<T,K>?

Kürzlich Las ich folgenden post-überlauf:
Versteckte Features von C#

Eines der Merkmale wies darauf hin wurde der arglist. Warum sollte man dieses wählen oder die alternativen, die als Mittel mit einer Variablen Länge der Argumentliste einer Methode? Beachten Sie auch, dass ich wahrscheinlich würde nicht verwenden, diese Art von konstruieren in meinem code, es sei denn, eine Ecke Fall gerechtfertigt, dies zu tun. Dies ist mehr eine Frage der Semantik, als ob es auch praktisch ist, oder klug, sogar mit variabler Länge Argumente. Also weiß jemand, welche besser ist und warum?

 [Test]
 public void CanHandleVariableLengthArgs()
 {
     TakeVariableLengthArgs(__arglist(new StringBuilder(), 12));

     object[] arr = { new StringBuilder() };
     TakeVariableLengthArgs2(arr);

     TakeVariableLengthArgs3(
         new Dictionary<string, object> 
         { { "key", new StringBuilder() } });
 }

 public void TakeVariableLengthArgs(__arglist)
 {
      var args = new ArgIterator(__arglist);

      var a = (StringBuilder)TypedReference.ToObject(args.GetNextArg());
      a.Append(1);
 }

 public void TakeVariableLengthArgs2(params object[] args)
 {
      var a = (StringBuilder)args[0];
      a.Append(1);
 }

 public void TakeVariableLengthArgs3(Dictionary<string, object> args)
 {
      var a = (StringBuilder)args["StringBuilder"];
      a.Append(1);
 }
  • Die Sohle durch-design Zweck __arglist-ist, so dass Sie können sicher tun interop-Anrufe zu und von Bibliotheken in C++ geschrieben, die Verwendung von C-Stil-var args. Verwenden Sie es nicht für nichts.
  • Wenn Sie möchten, um pinvoke wsprintf-Funktion, Sie gotta verwenden __arglist.
InformationsquelleAutor mkelley33 | 2009-05-26
Schreibe einen Kommentar