2016-04-08 11 views
0

Ich habe eine Methode, die eine Nullable-dezimal wie dies ein wenig aussieht welche Unterschrift akzeptiert: entwederein Verfahren mit einem Nullable-Dezimal-Parameter übergeben null

public void MyMethod(decimal? param1) 

Was bedingte ich vorbei ist, also bin ich einen Dezimalwert oder Null übergeben.

MyMethod((PassNullIfThisIsTrue) ? null : passThisDecimal); 

VisualStudio sagen, dass ich dies nicht tun kann, weil es eine implizite Konvertierung zwischen null und dezimal gibt. So warf ich null als Nullable-dezimal thusly:

MyMethod((PassNullIfThisIsTrue) ? (decimal?)null : passThisDecimal); 

Visual Studio ist glücklich, aber wenn ich diese Besetzung null übergeben, ich sehe param1 gleich 0.

Könnte jemand erklären, was hier los ist und/oder der beste Weg, um mit einer solchen Situation umzugehen? Ich sollte beachten, dass ich den Wert von passThisDecimal nicht ändern möchte. Danke im Voraus!

+0

Versuchen 'passThisDecimal' als Nullable-Dezimal-Casting. Andernfalls übergeben Sie entweder eine nullfähige Dezimalzahl oder eine nicht nullbare Dezimalzahl. – LinuxDisciple

+0

@LinuxDisciple nein, weil einer der Operanden etwas ist, dass der andere auch implizit erweitert werden kann, so dass das passiert. Mit beiden? Testen? (dezimal?) null: someDecimal' und 'test? null: (dezimal?) someDecimal' Der Typ wird 'decimal?' 'oder so sein. –

Antwort

0

Visual Studio ist glücklich sein sollte, aber wenn ich diese Besetzung null übergeben, ich sehe param1 gleich 0.

Wahrscheinlichkeiten sind, dass PassNullIfThisIsTrue ist eigentlich falsch, so dass Sie die nicht null passThisDecimal Wert übergeben, die ich denke, ist zu diesem Zeitpunkt Null. Mit anderen Worten, der Code, mit dem Sie arbeiten, ist korrekt (auch wenn der Code, den Sie hier gepostet haben, einen Tippfehler enthält, der das Kompilieren verhindert), aber Sie stellen keine geeigneten Eingaben zum Testen des Codepfads bereit Du erwartest zu treffen.

+1

PassNullIfThisIsTrue war sicherlich falsch (seufzen). Danke, dass Sie sich die Zeit genommen haben, darauf hinzuweisen. – lobsterhat

0

(?decimal) ist falsch Syntax es (decimal?)

Tun Sie dies

MyMethod((PassNullIfThisIsTrue) ? null : (decimal?)passThisDecimal); 

Oder diese

MyMethod((PassNullIfThisIsTrue) ? (decimal?)null : passThisDecimal); 
0

Sie können dies tun:

MyMethod(PassNullIfThisIsTrue ? null : new decimal?(passThisDecimal)); 
Verwandte Themen