Heim > Backend-Entwicklung > C++ > Kann ich auf anonyme C#-Typobjekte außerhalb ihres deklarierten Bereichs zugreifen?

Kann ich auf anonyme C#-Typobjekte außerhalb ihres deklarierten Bereichs zugreifen?

DDD
Freigeben: 2024-12-28 17:17:11
Original
739 Leute haben es durchsucht

Can I Access C# Anonymous Type Objects Outside Their Declared Scope?

Zugriff auf anonyme Typobjekte außerhalb ihres deklarierten Bereichs

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;
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage