Frage

Gibt es praktische Anwendungen von der TypedReference struct dass Sie würden tatsächlich in realen Code verwenden?

Bearbeiten : Das FRAMEWORK verwendet sie in Überlastungen von Console.WriteLine und String.Concat, die eine Anordnung aus einem __arglist Parameter aufzubauen und sie in den normalen Überlast- params passieren. Warum gibt es diese Überlastungen?

War es hilfreich?

Lösung

  

Gibt es praktische Anwendungen der TypedReference Struktur, die Sie tatsächlich in realen Code verwenden würde?

Ja. Ich würde sie verwenden, wenn ich die Interoperabilität benötigt, um mit C-Stil variadische Methoden.

  

Warum diese Überlastungen gibt es?

Sie existieren für die Interoperabilität mit Anrufern, die wie C-Stil variadische Methoden verwenden.

Andere Tipps

Dies scheint eine sehr alte Frage zu sein, aber ich möchte einen weiteren Anwendungsfall hinzuzufügen: Wenn Sie eine Struktur haben und wollen ihre Variable durch Reflexion setzen, würden Sie immer auf dem Box-Wert arbeiten und nie ändern das Original. Dies ist nutzlos:

TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = typeof(TestFields).GetField("MaxValue");
info.SetValue(fields, 4096);

// result: fields.MaxValue is still 1234!!

Dies kann mit impliziten Boxen behoben werden, aber dann verlieren Sie Typsicherheit. Stattdessen können Sie dieses Problem beheben mit einem TypedParameter:

TestFields fields = new TestFields { MaxValue = 1234 };
FieldInfo info = fields.GetType().GetField("MaxValue");

TypedReference reference = __makeref(fields);
info.SetValueDirect(reference, 4096);

// result: fields.MaxValue is now indeed 4096!!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top