2009-08-07 9 views
5

He una propiedad declarada como sigue:¿Hay alguna manera mejor de escribir esta línea de código C# en C# 3.0?

public decimal? MyProperty { get; set; } 

estoy necesitando para pasar este valor a otro método como una cadena y por lo que la única manera que veo de hacerlo es la siguiente:

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

Esto se ve muy complicado cuando tiene varias propiedades similares que se pasan a un método.

¿Alguien sabe si hay una forma mejor y más concisa de escribir esto?

Ah, y si alguien puede pensar en un título más apropiada a esta pregunta no dude en cambiarlo ...

Respuesta

15

Puede utilizar el ...

var s = MyProperty.ToString(); // returns "" if MyProperty is null 
+0

Guau, ¿de verdad? Has aprendido algo nuevo Nunca lo hubiera intentado, pensando que arrojaría una excepción de puntero nulo – Paul

+0

¡Guau! No tenía ni idea .ToString todavía trabajaba para un valor nulo que era nulo. ¡Eso es genial! – mezoid

+0

... Pero parece que el autor quería tener NULL si el valor es NULL !! ?? –

1

Usted podría utilizar HasValue en lugar de la comparación:

MyProperty.HasValue ? MyProperty.Value.ToString() : null; 
1

cadena Make Nullable<T>.ToString()override obtener las propiedades de la clase que contiene la propiedad y no va a ser un poco incómodo wen, que necesita para obtener t la versión de cadena.

public decimal? MyProperty { get; set; } 

    public string MyPropertyString 
    { 
     get 
     { 
      return MyProperty.HasValue ? MyProperty.Value.ToString() : null; 
     } 
    } 
1

Puede declarar un método de extensión en Decimal.

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

A continuación, lo llama así:

MyProperty.Str() 
+0

No. Debe estar en decimal **? ** (Nullable) –

1

si está bien tener cero Istead de null a continuación:

(MyProperty ?? 0).ToString() 

añadir lo contrario método de extensión:

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

// Use: 
MyProperty.AsString() // This will NEVER cause NullReferenceException 
Cuestiones relacionadas