Der beste Weg, um zu überprüfen, ob der Wert in Expression Tree null ist

c# expression-trees

Frage

Was ist der beste Weg zu prüfen, ob in Expression Trees die Konstante null ist?

// Method to call (Regex.IsMatch)
MethodInfo isMatchMethod = typeof(Regex).GetMethod("IsMatch", new[] { typeof(string), typeof(string), typeof(RegexOptions) });

// The member you want to evaluate: (x => x.<property_name>)
var member = Expression.Property(param, propertyName);

// The value you want to evaluate
var constant = Expression.Convert(Expression.Constant(value), type);

// How to check if constant is null???
var expr = Expression.Call(isMatchMethod, member, constant, Expression.Constant(RegexOptions.IgnoreCase));

// Doesn't work
// Expression notNullConstant = value != null ? constant : Expression.Convert(Expression.Constant(string.Empty), type);
//var expr = Expression.Call(isMatchMethod, member, notNullConstant, Expression.Constant(RegexOptions.IgnoreCase));

Akzeptierte Antwort

Nicht sicher, was das Problem ist. Sie können eine übersetzen a ?? b wörtlich in einen Baum mit Expression.Coalesce . Wenn Sie Zweifel haben, kompilieren Sie einen Ausdruck mit dem C # -Compiler und schauen Sie sich an, was er getan hat.

http://tryroslyn.azurewebsites.net/#f:r/K4Zwlgdg5gBAygTxAFwKYFsDcAoUlaIoYB0AMpAI7ECiAHgA4BOqI4A9hCDvcAEYA2YAMYwh/AIasYAYRgBvbDCUweA4TABubMABMYAWQAUASnmLlFukxbsIAHgBiwCELspG+AHyeY4mAF4YEwCfACJQmAB+SJhwnAsAX2wEoAA=

Inzwischen hast du gefragt, wie man kompiliert ?: . Die Antwort ist die gleiche: Dekompilieren Sie einfach vorhandenen Code, um zu sehen, was ausgegeben wird. Verwenden Sie Expression.Condition .



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum