unassigned stored parameter example bool c# properties out-parameters

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.