stored - ref parameter c#
Pasar una propiedad como un parĂ¡metro ''fuera'' en C# (2)
Supongamos que tengo:
public class Bob
{
public int Value { get; set; }
}
Quiero pasar el miembro Value como un parámetro de salida como
Int32.TryParse("123", out bob.Value);
pero obtengo un error de compilación, el argumento '''' fuera '''' no se clasifica como una variable ''''. ¿Hay alguna forma de lograr esto, o voy a tener que extraer una variable, à la:
int value;
Int32.TryParse("123", out value);
bob.Value = value;
Puede lograr eso, pero no con una propiedad.
public class Bob {
public int Value { get; set; } // This is a property
public int AnotherValue; // This is a field
}
No puede usar out
en Value
, pero puede AnotherValue
en AnotherValue
.
Esto funcionará
Int32.TryParse("123", out bob.AnotherValue);
Pero, las pautas comunes le dicen que no haga público un campo de clase. Entonces debes usar el enfoque de variable temporal.
Tendría que usar explícitamente un campo y una propiedad "normal" en lugar de una propiedad implementada automáticamente:
public class Bob
{
private int value;
public int Value
{
get { return value; }
set { this.value = value; }
}
}
Luego puede pasar el campo como un parámetro de salida:
Int32.TryParse("123", out bob.value);
Pero, por supuesto, eso solo funcionará dentro de la misma clase, ya que el campo es privado (¡y debería serlo!).
Las propiedades simplemente no te dejan hacer esto. Incluso en VB, donde puede pasar una propiedad por referencia o usarla como un parámetro de salida, básicamente hay una variable temporal adicional.
Si no le importó el valor de retorno de TryParse
, siempre podría escribir su propio método de ayuda:
static int ParseOrDefault(string text)
{
int tmp;
int.TryParse(text, out tmp);
return tmp;
}
Luego usa:
bob.Value = Int32Helper.ParseOrDefault("123");
De esta forma, puede usar una única variable temporal incluso si necesita hacer esto en múltiples lugares.