Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt]Wie kann ich ein dynamic zu einem object casten?
Yeats
myCSharp.de - Member



Dabei seit:
Beiträge: 97
Herkunft: Österreich

Themenstarter:

[erledigt]Wie kann ich ein dynamic zu einem object casten?

beantworten | zitieren | melden

Hallo,

Ich hab ein Verständisproblem mit dynamic.
Folgende Method:


public object Cast(dynamic dynObj){
return (object)dynObj;
}
Diese Methode wird mit einem dynamic object aufgerufen.


public class Test : DynamicObject{xxx}

Test test = new Test();
dynamic obj = (dynamic)test;

var x = Test(obj);
Soweit ist auch alles in Ordnung. Was mich allerdings wundert, wenn der Kompiler den Typen selbst erkennt, dann ist für ihn x vom Typ dynamic.

Wenn ich den Aufruf so gestalte, dann ist x vom Typ object.


object x = Test(obj);

Meine Frage ist jetzt eigentlich nur, warum wird bei impliziter Konvertierung der Typ auf dynamic gecastet?

Grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Yeats am .
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1536
Herkunft: Düsseldorf

beantworten | zitieren | melden

Ich versuche deine Frage mal etwas anders zu formulieren:

Folgende Methode:

public int Cast(dynamic dynObj)
{
    return 123;
}
(Ich habe bewusst int als Rückgabewert verwendet, damit es mehr auffällt)

Zwei Aufrufe:

Test test = new Test();
dynamic obj = (dynamic)test; // man achte darauf, dass die Variable explizit dynamic ist
var result = Cast(obj); // result wird als Typ dynamic erkannt

// ================================

Test test = new Test();
object obj = (dynamic)test; // man achte darauf, dass die Variable explizit object ist
var result = Cast(obj); // result wird als Typ int erkannt

Ich hab dazu diese Frage gefunden.
Zitat
The reason here is that once you enter the dynamic world in C# you are going into late binding. The compiler can't verify this code because it can no longer use any static type analysis. So it defers until later. You can help overcome this by providing static casts as a guide for the compiler.

Ich tippe darauf, dass sich die Entwickler etwas Arbeit gespart haben, auch wenn es, logisch betrachtet, möglich gewesen wäre.
Vermutlich ist es so schon komplex genug, voraus ahnen zu können, welchen Typ eine Variable haben wird und zwischendurch dynamic macht das sicher nicht einfacher. Der einfachere Weg war daher, bei jeder Verwendung von dynamic die dadurch entstehenden Variablen pauschal ebenfalls als dynamic zu interpretieren.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
Yeats
myCSharp.de - Member



Dabei seit:
Beiträge: 97
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

Ah, ja so betrachtet macht es natürlich Sinn.
private Nachricht | Beiträge des Benutzers