Warum ist der Schalterausdruck von C#8 im Ausdrucksbaum ungültig?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Warum ist der Schalterausdruck von C#8 im Ausdrucksbaum ungültig?

Post by Anonymous »

Betrachten Sie den folgenden Code in AutoMapper

Code: Select all

CreateMap()
.ForMember(
x => x.Type,
opt => opt.MapFrom(y =>
y.TypeName switch
{
"FirstName" => typeof(FirstModel),
"SecondName" => typeof(SecondModel),
_ => null
}));
Ich habe einige verschiedene Fälle und möchte für jede Zeichenfolge einen bestimmten Typ zurückgeben.

Der Compiler ist anderer Meinung:


Ein Ausdrucksbaum darf keinen Schalterausdruck enthalten.


Warum ist das so? Ich würde erwarten, dass diese Funktion, die sauber als Ausdruck bezeichnet wird, intern Expression.Switch ausführt und daher in Ausdrucksbäumen verwendet werden sollte.

Ich weiß, dass ich die Syntax eines ternären Operators verwenden kann. Ich würde gerne verstehen, warum es nicht funktioniert.

Bearbeiten

Danke Sweeper für den Hinweis, dass es sich dabei eigentlich nicht um einen Schalterausdruck handelt. Ich schätze, ich wurde vom Kongresszug mitgerissen und habe mich von der Namensgebung täuschen lassen.

Ivan Stoev Mir ist bewusst, dass es nicht unterstützt wird, aber ich bin neugierig, warum. Ich verstehe, warum der Blockbereich nicht unterstützt wird, aber die Switch-Schreibweise ist von Natur aus sehr einfach und deklarativ, was gut in einen Ausdrucksbaum passen würde.

Bearbeiten 2
Dank des Kommentars von Jeroen Mostert unten verstehe ich jetzt, dass eine Switch-Schreibweise intern alles andere als einfach ist und daher in Ausdrucksbäumen keinen Platz hat.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post