C#. TryParse не хочет работать с Read() вместо ReadLine(). Почему не работает?

Хотел сделать вот так if (char.TryParse(sr.Read(), out char REZ)) { }, чтобы первый символ из строки сохранялся в переменную REZ типа char, но выдаёт ошибку на sr.Read(): не удается преобразовать из "int" в "string"

sr - это StreamReader.

Почему оно так работает и возможно ли это как-то исправить без try..catch?

я добавил бы метку TryParse если бы такая существовала или если бы у меня было бы необходимое количество репутации. Сори за малое количество тегов.


Ответы (1 шт):

Автор решения: Dev18

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

введите сюда описание изображения

→ Ссылка