Pregunta

¿Cómo me refiero explícitamente al parámetro en lugar de la variable miembro?

static recursive{

    public static List<string> output = new List<string>();

    public static void Recursive(List<string> output){
        ...
    }
}
¿Fue útil?

Solución

Una referencia no calificada siempre Consulte el parámetro porque está en un alcance más local.

Si desea consultar la variable de miembro, debe calificarla con el nombre de la clase (o this, para variables de miembros no estáticos).

output = foo;              // refers to the parameter
recursive.output = foo;    // refers to a static member variable
this.output = foo;         // refers to a non-static member variable

Pero probablemente deberías cambiar el nombre de todos modos. Hace que su código sea mucho más fácil de leer.

Y no deberías tener variables estáticas públicas en absoluto. Todas las pautas de estilo de codificación .NET recomiendan fuertemente propiedades en lugar de exponer campos públicos. Y dado que siempre son de forma de camello, este problema se resuelve a sí mismo.

Otros consejos

public static void Recursive(List<string> output){
        ...
    }

El código en el bloque que se refiere al output siempre será local y no la variable miembro.

Si desea referirse a la variable de miembro, puede usar recursive.output.

Cuando estás dentro del Recursive método estático output señalará el argumento del método. Si desea señalar el campo estático, use el nombre de la clase estática como prefijo: recursive.output

Dale otro nombre a la variable de su miembro. La convención es utilizar camelas en miembros estáticos públicos.

public static List<string> Output = new List<string>();

public static void Recursive( List<string> output )
{
   Output = output;
}

Puede referencia explícitamente recursive.output Para indicar el miembro estático, pero sería más limpio cambiar el nombre del parámetro o el miembro.

No sé de ninguna manera de referirme explícitamente a un parámetro. La forma en que esto generalmente se maneja es dar a las variables de los miembros un prefijo especial como _ o m_ para que los parámetros nunca tendrán exactamente el mismo nombre. La otra forma es referirse a las variables de los miembros usando esto.var.

public class MyClass {
    public int number = 15;

    public void DoSomething(int number) {
        Console.WriteLine(this.number); // prints value of "MyClass.number"
        Console.WriteLine(number); // prints value of "number" parameter
    }
}

EDITAR::

Para campos estáticos se requiere nombre de clase en lugar de "esto":

public class MyClass {
    public static int number = 15;

    public void DoSomething(int number) {
        Console.WriteLine(this.number); // prints value of "MyClass.number"
        Console.WriteLine(MyClass.number); // prints value of "number" parameter
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top