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
  • 28,090
  • 37
  • 107
  • 148

5 Answers5

15

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

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

You could use HasValue instead of the comparison:

MyProperty.HasValue ? MyProperty.Value.ToString() : null;
Paul
  • 9,409
  • 13
  • 64
  • 113
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
  • 178,213
  • 47
  • 333
  • 501
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
  • 23,696
  • 13
  • 75
  • 130