practices - constants naming convention c#
C#Nombre de la variable "_"(subrayado) solamente (3)
Hoy en día con C # 7.0 el _
tiene importancia a veces. Se convirtió en el operador de descarte para la nueva característica out var
. Se utiliza cuando una función devuelve un valor y desea notificar al compilador que no lo va a utilizar, por lo que puede optimizarse. O cuando deconstruye (otra característica de C # 7.0) puedes usarla para ignorar parte de la tupla en la que no estás interesado.
Ejemplo de var
void Test(out int i) => i = 1;
Test(out _); // _ was never declared, it will still compile in C# 7.0
var r = _; // error CS0103: The name ''_'' does not exist in the current context
Ejemplo deconstruyendo una tupla
var Person = ("John", "Smith");
var (First, _) = Person; // ''_'' is not a declared
Debug.Print(First); // prints "John"
Debug.Print(_); // error CS0103: The name ''_'' does not exist in the current context
Surge un problema si declara su propia variable llamada _
y luego usa el operador de descarte, esto causará ambigüedad. Este problema ha sido reportado Here .
EDITAR El problema anterior no es un problema, como señala @ maf-soft en los comentarios. Si se declaró _
, se trata como una variable regular como si fuera anterior a C # 7.0.
Acabo de recibir un problema menor en C #, fue solo un error copiar y pegar, pero no sé cómo C # lo acepta.
Este código se compila correctamente ... CÓMO
namespace DemoNS
{
class DemoClass
{
String _ = new String(''a'', 1);
}
}
¿Hay algún significado por defecto de la variable llamada _
?
No, no hay un significado predeterminado, _
es solo un nombre de variable como cualquier otro.
Me gusta usarlo de manera similar a las variables anónimas de Prolog: cuando creas un lambda que ignora uno de sus parámetros, puedes nombrarlo _
:
EventHandler handler = (_, e) => Console.WriteLine(e);
Por otro lado, no lo usaría en ningún otro lugar, debería usar un nombre descriptivo.
EDITAR: Tenga en cuenta que en C # 7.0, _
veces tiene un significado especial. Por ejemplo, puede escribir _ = new String(''a'', 1);
, incluso si no declaraste una variable llamada _
.
_
es un carácter válido igual que a
o i
y las variables sintácticas pueden comenzar con _
por lo que un solo nombre de carácter _
es perfectamente sintácticamente correcto. No es una opción realmente buena, pero compilará y funcionará bien.