public static void Main()
Coordinate coord = null;;
string errorMessage = string.Empty;
var success = Coordinate.TryParse("3.14, 15.28b", out coord, out errorMessage);
Console.WriteLine("Error: " + errorMessage);
Console.WriteLine("Coordinate is valid?: " + coord.IsValid());
Console.WriteLine("Success: " + coord.ToString());
public class Coordinate {
public Coordinate(decimal x, decimal y) : this() {
public decimal? X { get; set; }
public decimal? Y { get; set; }
public const char AxisSeparator = ',';
return X.HasValue && Y.HasValue;
public static bool TryParse(string input, out Coordinate result, out string errorMessage) {
errorMessage = string.Empty;
result = new Coordinate();
var parts = input.Split(AxisSeparator);
if (parts.Count() != 2) {
errorMessage = "Expected input in format 'X.XX, Y.YY' with '" + AxisSeparator + "' to separate X and Y coordinates.";
if (!decimal.TryParse(parts[0], out x)) {
errorMessage = "Expected input in format 'X.XX, Y.YY' with X.XX as number, but it was '" + parts[0] + "'.";
if (!decimal.TryParse(parts[1], out y)) {
errorMessage = "Expected input in format 'X.XX, Y.YY' with Y.YY as number, but it was '" + parts[1] + "'.";
result = new Coordinate(x, y);
public override string ToString() { return X.ToString() + AxisSeparator + " " + Y.ToString(); }