Anonyme Typen in C# bieten eine bequeme Möglichkeit, schlanke Ad-hoc-Objekte zu erstellen. Der Zugriff auf diese Objekte außerhalb des Bereichs, in dem sie deklariert sind, kann jedoch eine Herausforderung darstellen.
Beachten Sie den Beispielcode unten:
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }).FirstOrDefault(); return a; }
Hier wird ein anonymes Typobjekt in der FuncA-Methode erstellt und als Objekt zurückgegeben. In der FuncB-Methode beschwert sich der Compiler jedoch, dass obj keine Definition für Name enthält.
Warum können wir nicht auf die Eigenschaften des anonymen Typobjekts außerhalb seines deklarierten Bereichs zugreifen?
Anonyme Typen sind im Wesentlichen vom Compiler generierte Klassen, die eine stark typisierte Schnittstelle implementieren. Wenn Sie einen anonymen Typ erstellen, generiert der Compiler einen eindeutigen Typnamen für jeden erstellten eindeutigen anonymen Typ. Diese Typen sind für die Assembly, in der sie deklariert werden, eindeutig und können außerhalb dieser Assembly nicht aufgerufen werden.
Können wir auf anonyme Typobjekte außerhalb ihres deklarierten Bereichs zugreifen?
Technisch gesehen gilt: Ja. Aufgrund möglicher Leistungseinbußen und Sicherheitsprobleme wird davon jedoch dringend abgeraten.
Eine Methode, bekannt als „Cast by Beispiel“, beinhaltet die Verwendung von Reflektion, um das anonyme Typobjekt in einen bekannten Beispieltyp umzuwandeln. Diese Lösung ist jedoch komplex, unzuverlässig und kann bei zukünftigen Compileränderungen abstürzen.
public void FuncB() { var example = new { Id = 0, Name = string.Empty }; var obj = CastByExample(FuncA(), example); Console.WriteLine(obj.Name); }
Es ist wichtig zu beachten, dass der Zugriff auf anonyme Typobjekte außerhalb ihres deklarierten Bereichs zu unerwartetem Verhalten führen kann und im Allgemeinen nicht empfohlen wird .
Das obige ist der detaillierte Inhalt vonKann ich auf anonyme C#-Typobjekte außerhalb ihres deklarierten Bereichs zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!