5

I have a property declared as follows:

public decimal? MyProperty { get; set; }

I am needing to pass this value to another method as a string and so the only way I see to do so is as follows:

MyProperty == null ? null : MyProperty.ToString()

This looks very messy when you have a number of similar properties being passed into a method.

Does anyone know if there is a better and more concise way of writing this?

Oh, and if anyone can think of a more appropriate title to this question please feel free to change it...

mezoid
  • 27,474
  • 35
  • 106
  • 148

5 Answers5

15

You can use the Nullable<T>.ToString() override ...

var s = MyProperty.ToString(); // returns "" if MyProperty is null
JP Alioto
  • 44,379
  • 6
  • 86
  • 112
1

You could use HasValue instead of the comparison:

MyProperty.HasValue ? MyProperty.Value.ToString() : null;
Paul
  • 9,149
  • 12
  • 61
  • 107
1

Make string get properties on the class containing the property and it won't be messy wen you need to get the string version.

    public decimal? MyProperty { get; set; }

    public string MyPropertyString
    {
        get
        {
            return MyProperty.HasValue ? MyProperty.Value.ToString() : null;
        }
    }
jasonmw
  • 1,138
  • 9
  • 20
1

You could declare an extension method on Decimal.

public static string Str(this decimal? value)
{
    return value == null ? null : MyProperty.ToString()
}

You then call it like this:

MyProperty.Str()
Robert Harvey
  • 173,679
  • 45
  • 326
  • 490
1

If it is ok to have zero istead of null then:

(MyProperty ?? 0).ToString()

Otherwise add extension method:

public static string AsString(this decimal? val)
{
    return val == null ? null : val.Value.ToString();
}

// Use:
MyProperty.AsString() // This will NEVER cause NullReferenceException
Dmytrii Nagirniak
  • 22,978
  • 12
  • 70
  • 126