2012-02-01 21 views
5

Duplicar posible:
What's the use/meaning of the @ character in variable names in C#?
C# prefixing parameter names with @LINQ, lambda y @

siento que debería saber esto y me parece imposible Google. A continuación es un extracto de un código LINQ me encontré:

private static readonly Func<SomeEntities, someThing, List<someThing>> GetReplacement = 
(someEntities, thing) => someEntities.someReplacement.Join(someEntities.someThing, 
          replaces => replaces.new_thing_id, 
          newThing => newThing.thing_id, 
          (rep, newThing) => new {rep, newThing}).Where(
           @t => @t.rep.thing_id == thing.thing_id). 
Select 
(
    @t => @t.newThing 
).ToList().Distinct(new SomeThingComparer()).ToList(); 

¿Qué significa el prefijo '@' en este contexto?

Respuesta

14

Por lo general, la @ prefijo se utiliza si es necesario utilizar una palabra clave como un identificador, como un nombre de variable:

string @string = "..."; 

El C# spec dice lo siguiente (el énfasis es mío):

El prefijo "@" permite el uso de palabras clave como identificadores, lo cual es útil cuando se interactúa con otros lenguajes de programación. El carácter @ no es realmente parte del identificador, por lo que el identificador podría verse en otros idiomas como un identificador normal, sin el prefijo. Un identificador con un prefijo @ se denomina identificador literal. El uso del prefijo @ para los identificadores que no son palabras clave está permitido, pero se desaconseja por cuestiones de estilo.

Desde t no es una palabra clave, diría que el @ debe ser eliminado en su ejemplo.

+0

¡Ja! Sabía que era algo que debería haber sabido. ¡Gracias! – Niklas

+0

@Jon Skeet: :) .... –