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); // Выводим символ
}
}
}
}