Exercício – Examinar o método TryParse()
- 12 minutos
Às vezes, ao trabalhar com dados, é necessário converter dados de cadeia de caracteres em um tipo de dados numérico. Você aprendeu na unidade anterior que, como o tipo de dados de cadeia de caracteres pode conter um valor não numérico, é possível que a conversão de um string em um tipo de dados numérico cause um erro de runtime.
Por exemplo, o código a seguir:
string name = "Bob";
Console.WriteLine(int.Parse(name));
Causa a seguinte exceção:
System.FormatException: 'Input string was not in a correct format.'
Para evitar uma exceção de formato, use o método TryParse() no tipo de dados de destino.
Use TryParse()
O método TryParse() faz várias coisas simultaneamente:
- Ele tenta converter uma cadeia de caracteres para o tipo de dado numérico fornecido.
- Se a conversão der certo, o valor convertido é armazenado em um parâmetro de saída, explicado na seção a seguir.
- Retorna um
boolpara indicar se a ação foi bem-sucedida ou falhou.
É possível usar o valor de retorno booliano para tomar uma ação com relação ao valor (como realizar algum cálculo) ou exibir uma mensagem indicando se a operação de análise não for bem-sucedida.
Observação
Neste exercício, você usará o tipo de dados int, mas um método TryParse() semelhante está disponível para todos os tipos de dados numéricos.
Parâmetros externos
Os métodos podem retornar um valor ou retornar "nulo" - o que significa que eles não retornam nenhum valor. Os métodos também podem retornar valores por meio de parâmetros out, definidos como um parâmetro de entrada, porém incluem a palavra-chave out.
Usar TryParse() para converter uma string em um int
Exclua ou use o operador de comentário de linha
//para remover todo o código dos exercícios anteriores.Atualize o código no Editor do Visual Studio Code da seguinte maneira:
string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); }Examine esta linha de código:
if (int.TryParse(value, out result))Ao chamar um método com um parâmetro
out, é necessário usar a palavra-chaveoutantes da variável, que contém o valor. O parâmetroouté atribuído à variávelresultno código(int.TryParse(value,out result). Em seguida, é possível usar o valor que o parâmetrooutcontém em todo o restante do código por meio da variávelresult.O método
int.TryParse()retornatruese a variávelstringvaluefoi convertida com sucesso em umint. Caso contrário, retornafalse. Portanto, envolva a instrução em uma instruçãoife execute a lógica de decisão de modo adequado.O valor convertido é armazenado na variável
intresult. Aintvariávelresulté declarada e inicializada antes dessa linha de código; portanto, deve ser acessível dentro dos blocos de código que pertencem às instruçõesifeelse, bem como fora delas.A palavra-chave
outindica ao compilador que o métodoTryParse()não retornará um valor somente da maneira tradicional (como um valor de retorno), mas também comunica uma saída por meio desse parâmetro bidirecional.Ao executar o código, você verá a seguinte saída:
Measurement: 102
O int analisado será usado posteriormente no código
Para demonstrar que a variável
resultdeclarada anteriormente contém o parâmetrooute também será usada posteriormente no código, atualize-o no Editor do Visual Studio Code da seguinte maneira:string value = "102"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } Console.WriteLine($"Measurement (w/ offset): {50 + result}");No menu Arquivo do Visual Studio Code, selecione Salvar. O arquivo Program.cs deve ser salvo antes de criar ou executar o código.
No painel EXPLORER, para abrir o Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado. Um painel Terminal deve ser aberto e incluir um prompt de comando mostrando que o Terminal está aberto no diretório da pasta TestProject.
No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.
Observação
Se você vir uma mensagem com a mensagem "Não foi possível encontrar um projeto a ser executado", verifique se o prompt de comando Terminal exibe o local esperado da pasta TestProject. Por exemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>A seguinte saída deve ser exibida:
Measurement: 102 Measurement (w/ offset): 152Examine a última linha de código no exemplo anterior,
Console.WriteLine($"Measurement (w/ offset): {50 + result}");, uma vez que a variávelresulté definida fora da instrução if, ela pode ser acessada posteriormente em seu código.
Modificar a variável de cadeia de caracteres para um valor que não possa ser analisado
Por fim, observe o outro cenário, em que TryParse() recebe intencionalmente um valor inválido que não pode ser convertido em um int.
Modifique a primeira linha de código e reinicialize a variável
valuepara um valor diferente.string value = "bad";Além disso, modifique a última linha de código para que o resultado seja maior que 0 antes de mostrar a segunda mensagem.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Todo o exemplo de código agora deve corresponder ao seguinte código:
string value = "bad"; int result = 0; if (int.TryParse(value, out result)) { Console.WriteLine($"Measurement: {result}"); } else { Console.WriteLine("Unable to report the measurement."); } if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Salve o arquivo de código e use o Visual Studio Code para executar o código. Você verá o seguinte resultado:
Unable to report the measurement.Examine as duas últimas linhas de código adicionadas no exemplo anterior.
if (result > 0) Console.WriteLine($"Measurement (w/ offset): {50 + result}");Como
resulté definido fora da instruçãoif,resultpode ser acessado posteriormente no código fora dos blocos de código. Portanto,resultpode ser verificado quanto a um valor maior que zero antes de permitir queresult+ deslocamento seja gravado como saída. A verificação de um valor deresultmaior que zero evita a impressão de um valor de deslocamento após a mensagemUnable to report the measurement..
Recapitulação
O método TryParse() é uma ferramenta valiosa. Veja algumas ideias rápidas das quais se lembrar.
- Use
TryParse()ao converter uma cadeia de caracteres em um tipo de dados numérico. TryParse()retornarátruese a conversão tiver sido bem-sucedida;falsese não tiver sido bem-sucedida.- Os parâmetros de saída fornecem um meio secundário de um método retornar um valor. Nesse caso, o parâmetro
outretorna o valor convertido. - Use a palavra-chave
outao passar um argumento para um método que tenha definido um parâmetroout.