1
resposta

porque uma soma de char não está dando retorno um char?

tentei isto:

            char primeiraLetra = (char)65;
            Console.WriteLine(primeiraLetra);
            primeiraLetra = primeiraLetra + (char)1;

e está dando erro de compilação. o VS está sugerindo esta correção:

            char primeiraLetra = (char)65;
            Console.WriteLine(primeiraLetra);
            primeiraLetra = (char)(primeiraLetra + (char)1);

e dizendo Erro CS0266 Não é possível converter implicitamente tipo "int" em "char". Existe uma conversão explícita (há uma conversão ausente?)

mas o que é o tal do tipo int? a variável primeiraLetra eu declarei como char... o resultado da soma? estranho a soma de dois char não dar um char... é isso que acontece?

1 resposta

Sim, a soma de dois valores do tipo char não retorna um char, conforme lido na documentação do C#: https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/types#integral-types (se o link não redirecionar para o trecho específico da página, o item a se procurar é o trecho falando de "Tipos integrais").

O primeiro parágrafo com a primeira lista desse trecho da página descreve todos os tipos integrais, seus tamanhos e valores aceitáveis, mas o importante é o parágrafo abaixo da primeira lista, que descreve as operações entre os tipos inteiros, e está replicado logo abaixo (e destacado por mim):

Os operadores unários e binários de tipo integral sempre operam com precisão de 32 bits assinada, precisão de 32 bits sem sinal, precisão de 64 bits assinada ou precisão de 64 bits não assinado:

  • [...]
  • Para os operadores binários +, -, , /, %, &, ^, |, ==, !=, >, <, >= e <= , *os operandos são convertidos no tipo T, em que T é o primeiro de int, uint, long e ulong que pode representar totalmente todos os valores possíveis de ambos os operandos. Em seguida, a operação é executada usando a precisão do tipo T e o tipo do resultado é T (ou bool para os operadores relacionais). Não é permitido que um operando seja do tipo long e o outro seja do tipo ulong com os operadores binários.

Conclusão: no caso de operações entre valores do tipo char, os operadores sempre convertem o resultado para int.