2010-06-18 17 views
12

¿Es posible establecer un valor predeterminado sin el cuerpo de una propiedad? Preferiblemente con anotaciones.Establecer un valor predeterminado para una propiedad

[SetTheDefaultValueTo(true)] 
public bool IsTrue { get; set; } 

[SetTheDefaultValueTo(false)] 
public bool IsFalse { get; set; } 

public void Something() 
{ 
    var isTrue = this.IsTrue; 
    var isFalse = this.IsFalse; 
} 

Respuesta

18

No, no hay construido en capacidad de establecer el valor de una propiedad con metadatos. Podría usar una fábrica de algún tipo que construiría instancias de una clase con reflejo y luego eso podría establecer los valores predeterminados. Pero, en resumen, debe usar los constructores (o los ajustadores de campo ... que se levantan al constructor). Para establecer los valores predeterminados.

Si tiene varias sobrecargas para su contructor, puede consultar constructor chaining.

Utilizando C# 6+ que son capaces de hacer algo como esto ...

public string MyValue { get; set; } = "My Default"; 

Oh, se vuelve más divertido porque la gente, han pedido algo como esto ...

public string MyValue { 
    private string _myValue; 
    get { return _myValue ?? "My Default"; } 
    set { _myValue = value; } 
} 

... la ventaja es que puedes controlar el alcance del campo para que solo sea accesible en el código de la propiedad, por lo que no tienes que preocuparte por nada más en tu clase jugando con el estado sin usar el getter/setter.

+0

¿Hay algún lugar donde pueda votar esta función o algo así? – BrunoLM

+1

Es posible que pueda encontrar algo en connect.microsoft.com. –

+1

eek ... Acabo de encontrar esto en CodeProject. Utiliza la reflexión para establecer los valores predeterminados una vez que se ha construido el objeto. http://www.codeproject.com/KB/dotnet/AutoPropsDefaultValues.aspx –

14

Asigne el valor de propiedad predeterminado en el constructor de clase.

class MyClass 
{ 
    public MyClass() 
    { 
     IsTrue = true; 
     IsFalse = false; 
    } 

    public bool IsTrue { get; set; } 

    public bool IsFalse { get; set; } 

    [...] 

    public void Something() 
    { 
     var isTrue = this.IsTrue; 
     var isFalse = this.IsFalse; 
    } 

}

+2

esto se parece más a su pregunta en lugar de una respuesta a la misma. –

1

En este ejemplo muy específico, que tipo de hacer lo siguiente:

public bool IsFalse { get; set; } 
public bool IsTrue 
{ 
    get { return !IsFalse; } 
    set { IsFalse = !value; } 
} 

public void Something() 
{ 
    var isTrue = this.IsTrue; 
    var isFalse = this.IsFalse; 
} 

Pero, en general, no.

2

Tema viejo. Parece que Microsoft escuchó y esta característica está disponible en .Net Framework 4.6+ (C# 6+) Se puede utilizar como

public string MyValue { get; set; } = "My Default"; 
3

Si está usando C# 5 y anteriores, hay que hacerlo en un constructor

pero desde C# 6.0, se incluye la posibilidad de tener inicializadores de propiedad de automóviles, y la sintaxis es:

public int myage { get; set; } = 33; 
Cuestiones relacionadas