Ich bin gerade bei der Arbeit in C# auf diese Fehlermeldung gestoßen
Eine Eigenschaft oder ein Indexer darf nicht als out- oder ref-Parameter übergeben werden
Ich wusste, was die Ursache dafür war, und habe eine schnelle Lösung gefunden, indem ich eine lokale Variable des richtigen Typs erstellt und die Funktion mit ihr als out
/ ref
und weisen ihn dann wieder der Eigenschaft zu:
RefFn(ref obj.prop);
wird zu
{
var t = obj.prop;
RefFn(ref t);
obj.prop = t;
}
Dies würde natürlich fehlschlagen, wenn die Eigenschaft get und set im aktuellen Kontext nicht unterstützt.
Warum macht C# das nicht einfach für mich?
Die einzigen Fälle, in denen ich mir vorstellen kann, dass dies Probleme verursachen könnte, sind:
- Einfädeln
- Ausnahmen
Für Threading, dass die Transformation beeinflusst, wenn die Schreibvorgänge passieren (nach dem Funktionsaufruf vs. im Funktionsaufruf), aber ich eher vermuten, dass jeder Code, der auf, dass zählt würde wenig Sympathie erhalten, wenn es bricht.
Bei Ausnahmen wäre die Frage, was passiert, wenn die Funktion einer von mehreren Ausnahmen zugewiesen wird. ref
Parameter als Würfe? Jede triviale Lösung würde dazu führen, dass alle oder keiner der Parameter zugewiesen wird, obwohl einige zugewiesen werden sollten und einige nicht. Auch hier glaube ich nicht, dass dies eine unterstützte Verwendung der Sprache wäre.
Hinweis: Ich verstehe, warum diese Fehlermeldung erzeugt wird. Was ich suche, ist die Begründung, warum C# nicht automatisch die triviale Abhilfe implementiert.