Pergunta

Descobri que você pode iniciar o nome da sua variável com um caractere '@' em C#.No meu projeto C# eu estava usando um serviço web (adicionei uma referência web ao meu projeto) que foi escrito em Java.Um dos objetos de interface definidos no WSDL possuía uma variável membro com o nome "params".Obviamente, esta é uma palavra reservada em C#, portanto você não pode ter uma classe com uma variável de membro com o nome "params".O objeto proxy gerado continha uma propriedade semelhante a esta:

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

Pesquisei na documentação c# do VS 2008, mas não consegui encontrar nada sobre isso.Além disso, pesquisar no Google não me deu nenhuma resposta útil.Então, qual é o significado exato ou uso do caractere '@' em um nome de variável/propriedade?

Foi útil?

Solução

Direto do Especificação de idioma c#, Identificadores (C#) :

O prefixo "@" permite o uso de palavras -chave como identificadores, o que é útil ao interface com outras linguagens de programação. O caractere @ não faz parte do identificador, portanto o identificador pode ser visto em outros idiomas como um identificador normal, sem o prefixo. Um identificador com um prefixo @ é chamado de identificador literal.

Outras dicas

Ele apenas permite que você use uma palavra reservada como um nome de variável. Não recomendado IMHO (exceto em casos como você tem).

Em C#, o caractere at (@) é usado para denotar literais que explicitamente não aderem às regras relevantes nas especificações da linguagem.

Especificamente, pode ser usado para nomes de variáveis ​​que colidem com palavras-chave reservadas (por exemplovocê não pode usar parâmetros, mas pode usar @params, o mesmo com out/ref/qualquer outra palavra-chave na especificação do idioma).Além disso, pode ser usado para literais de string sem escape;isso é particularmente relevante com constantes de caminho, por ex.em vez de path = "c:\\temp\\somefile.txt" você pode escrever path = @"c:\temp\somefile.txt".Também é muito útil para expressões regulares.

Ao contrário dos sigilos de Perl, um @ prefixo antes de um nome de variável em C# não tem significado.Se x é uma variável, @x é outro nome para a mesma variável.

> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True

Mas o @ prefixo tem um usar, como você descobriu - você pode usá-lo para esclarecer nomes de variáveis ​​que o C# rejeitaria como ilegais.

> string string;
Identifier expected; 'string' is a keyword

> string @string;

o @ O símbolo permite que você use palavras -chave reservadas para o nome da variável. Curti @int, @string, @double etc.

Por exemplo:

string @public = "Reserved Keyword used for me and its fine";

O código acima funciona bem, mas abaixo não funcionará:

string public = "This will not compile";

Ele simplesmente permite que você use palavras reservadas como nomes de variáveis. Eu queria um Var chamado event o outro dia. Eu ia ir com _event em vez disso, mas meu colega me lembrou que eu poderia chamá -lo @event em vez de.

Outro caixa de uso está em métodos de extensão. O primeiro parâmetro especial pode ser distinguido de denotar seu verdadeiro significado com @this nome. Um exemplo:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if (!@this.ContainsKey(key))
        {
            return defaultValue;
        }

        return @this[key];
    }

Se usarmos uma palavra -chave como nome para um identificador, obtemos um erro do compilador "Identificador esperado, 'nome do identificador' é uma palavra -chave" para superar esse erro, prefixo o identificador com "@". Tais identificadores são identificadores literalmente. O personagem @ não faz parte do identificador, então o identificador pode ser visto em outros idiomas como um identificador normal, sem o prefixo

Você pode usá -lo para usar as palavras -chave reservadas como nome de variável como

 int @int = 3; 

o compilador ignorará o @ e compilar a variável como int

Não é uma prática comum usar o pensamento

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top