2016-09-01 1 views
6
konvertieren

Ich möchte die Null übergeben, wenn die Zeichenfolge beim Konvertieren von String in Double leer ist. Kann mir jemand bei der Syntax helfen? Als wo ich falsch liege? Aktuelle Syntax:Setzen Sie den Standardwert auf null, wenn Sie in C#

IngredientMinRange = !string.IsNullOrEmpty(MinRange) ? Convert.ToDouble(MinRange) : null 
+2

ist Double Werttyp müssen Sie es Nullwert machen, wenn Sie ihm Null zuweisen möchten –

+0

Es ist Nullable Public Double? IngredientMinRange {bekommen; einstellen; } Hier ist die Definition. – Programmermid

+0

dies gibt keine Nullable Double: Convert.ToDouble (MinRange) – Rumplin

Antwort

10

A double nicht null sein kann, da es sich um eine wert- ist und kein Referenztyp. Sie könnten ein Nullable<double> statt:

double? ingredientMinRange = null; 
if(!string.IsNullOrEmpty(MinRange)) 
    ingredientMinRange = Convert.ToDouble(MinRange); 

Wenn Sie den double Wert später möchten, können Sie die HasValue und Value Eigenschaften verwenden:

if(ingredientMinRange.HasValue) 
{ 
    double value = ingredientMinRange.Value; 
} 

Using Nullable Types (C# Programming Guide)


Wenn IngredientMinRange bereits ein Double? -property wie kommentiert können Sie den Wert entweder zuweisen via if oder in einer Linie (wie oben gezeigt), aber dann muss man die null gegossen: Sie Nullable<double> oder double? verwenden müssen zuweisen null zu einem Doppel

IngredientMinRange = string.IsNullOrEmpty(MinRange) ? (double?)null : Convert.ToDouble(MinRange); 
+0

würden Sie lieber 'Convert.ToDouble' statt' TryParse' verwenden, wenn Sie von einer Zeichenfolge konvertieren? (nur fragen) ist es schneller oder so? –

+0

@MatthiasBurger: Nein, ich würde 'double.Parse' oder' double.TryParse' bevorzugen (wenn die Eingabe ungültig sein kann). Aber OP hat 'Convert.ToDouble' verwendet, also habe ich angenommen, dass es gültig sein soll. Vielleicht ist 'Convert.ToDouble' nützlich, wenn die Eingabe ein' Objekt' anstelle einer 'Zeichenkette' ist. –

+0

Ahh okay, immer gut, um eine andere Meinung zu bekommen :) –

1

. Weisen Sie es mit dieser Methode hier:

decimal temp; 
decimal? IngredientMinRange = decimal.TryParse(MinRange, out temp) ? temp : (decimal?)null; 

dann können Sie auch weiterhin mit IngredientMinRange arbeiten. Sie erhalten den Wert mit IngredientMinRange.Value oder überprüfen Sie, ob es Null mit IngredientMinRange.HasValue

Verwandte Themen