2017-12-19 3 views
0

Ich habe eine Liste von RectangleF. Ich habe eine nicht statische Klasse, die einen Verweis auf ein Element aus dieser Liste haben muss. Ich versuche, einen Zeiger zu verwenden:Versuchen, Zeiger auf Listenelement zu erstellen

Item f = new Item(); 
unsafe 
{ 
    f.linkedCollider = &Collisions.items.Last(); 
} 

Allerdings stellt sich dieser einen Compiler-Fehler:

Cannot take the adress of a given expression

Gibt es eine Möglichkeit, um dies zu realisieren?

+0

Wenn Sie Referenzen auf die Elemente in der Liste behalten wollen, dann haben Sie eine Liste von Referenztypen, nicht Werttypen. Die Verwendung von Zeigern wird nicht zu einer produktiven Lösung führen. Und das setzt voraus, dass Sie einen Verweis auf den Gegenstand benötigen, mit dem Sie nicht beginnen können. – Servy

+0

Die Verwendung von Zeigern ist eine außerordentlich schlechte Idee. Erstellen Sie eine Klasse, die genau wie "RectangleF" aussieht, und verwenden Sie Referenzsemantik. – Amy

+1

Sie können C# 7.0 ref returns verwenden. Aber vielleicht solltest du das Problem, das du lösen willst, erklären, sieht aus wie ein xy-Problem. – Sefe

Antwort

0

Es gibt keinen Weg, um dies zu realisieren: im Gegensatz zu seinen Kollegen in C und C++, der Adressoperator & in C# ist sehr restriktiv: it can be applied only to variables:

The address-of operator can only be applied to a variable. If the variable is a moveable variable, you can use the fixed statement to temporarily fix the variable before obtaining its address.

Sie erhalten die Fehlermeldung, da Methodenaufruf ist keine Variable.

Da sich C# -Referenzen ähnlich wie Smartpointer verhalten, ohne die Pointer-Syntax zu benötigen, können Sie in den meisten Situationen, in denen eine Indirection erforderlich ist, Zeiger vermeiden.

Verwandte Themen