Sie könnten auch eine Erweiterungsmethode für diesen Zweck erstellen;
public static bool TryParse(this object value, out int? parsed)
{
parsed = null;
try
{
if (value == null)
return true;
int parsedValue;
parsed = int.TryParse(value.ToString(), out parsedValue) ? (int?)parsedValue : null;
return true;
}
catch (Exception)
{
return false;
}
}
Ich habe dies eine Erweiterung auf dem object
Typ, aber es könnte genauso gut sein, auf string
gemacht. Persönlich mag ich, dass diese Parser-Erweiterungen für jedes Objekt verfügbar sind, daher die Erweiterung object
anstelle von string
.
Beispiel:
[TestCase("1", 1)]
[TestCase("0", 0)]
[TestCase("-1", -1)]
[TestCase("2147483647", int.MaxValue)]
[TestCase("2147483648", null)]
[TestCase("-2147483648", int.MinValue)]
[TestCase("-2147483649", null)]
[TestCase("1.2", null)]
[TestCase("1 1", null)]
[TestCase("", null)]
[TestCase(null, null)]
[TestCase("not an int value", null)]
public void Should_parse_input_as_nullable_int(object input, int? expectedResult)
{
int? parsedValue;
bool parsingWasSuccessfull = input.TryParse(out parsedValue);
Assert.That(parsingWasSuccessfull);
Assert.That(parsedValue, Is.EqualTo(expectedResult));
}
Der Nachteil wäre, dass dies mit der Syntax Frameworks bricht Wert für das Parsen;
int.TryParse(input, out output))
Aber Ich mag die kürzere Version davon (ob es besser lesbar ist oder nicht könnte Gegenstand von Diskussionen sein);
input.TryParse(out output)
@JonSkeet - strValue kann null sein und die Trim() -Methode würde zu einer Ausnahme führen. Sag es einfach. :) –
@ShaktiPrakashSingh: Wir wissen nicht, ob 'strValue' null sein könnte oder nicht. Wenn es aus einem Textfeld kommt, kann es * wahrscheinlich nicht null sein. Mein Code versucht nicht, dies anzugehen, aber wir wissen wirklich nicht, ob er es * ansprechen sollte oder nicht. –
Warum nicht das 'if' umkehren? zB: 'if (int.TryParse (Request [" idParent "], out tmp)) idParent = tmp;' (sonst ist es null) – Dementic