C#. TryParse не хочет работать с Read() вместо ReadLine(). Почему не работает?
Хотел сделать вот так if (char.TryParse(sr.Read(), out char REZ)) { }, чтобы первый символ из строки сохранялся в переменную REZ типа char, но выдаёт ошибку на sr.Read(): не удается преобразовать из "int" в "string"
sr - это StreamReader.
Почему оно так работает и возможно ли это как-то исправить без try..catch?
я добавил бы метку TryParse если бы такая существовала или если бы у меня было бы необходимое количество репутации. Сори за малое количество тегов.
Ответы (1 шт):
StreamReader.Read() возвращает int (код символа), а char.TryParse() ожидает string
Поэтому использование TryParse здесь на мой взгляд некорректно. Вместо этого можно явно привести результат StreamReader.Read() к типу char, либо использовать методы, которые работают с числами, а не со строками
StreamReader.Read() делает так - он читает символ за символом в потоке и возвращает его код (в виде int), а если символов больше нет, он возвращает -1
именно поэтому добавим проверку ((readValue = sr.Read()) != -1) - для завершения цикла, когда все символы прочитаны
...но лучше конечно готовое решение взять, EndOfStream, который проверяет уже, выглядит лаконичней !sr.EndOfStream
Чтобы вывести символы в консоль, достаточно привести результат sr.Read() к типу char => (char)readValue
Например так
using System;
using System.IO;
class Program
{
static void Main(string[] args)
{
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
while (!sr.EndOfStream) // Используем свойство EndOfStream
{
char rez = (char)sr.Read(); // Читаем символ и приводим к типу char
Console.Write(rez); // Выводим символ
}
}
}
}
