Code: Select all
CreateMap()
.ForMember(
x => x.Type,
opt => opt.MapFrom(y =>
y.TypeName switch
{
"FirstName" => typeof(FirstModel),
"SecondName" => typeof(SecondModel),
_ => null
}));
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.
Mobile version