Посмотрите на эти строки:
StringBuilder strbuild = new StringBuilder();
strbuild = null;
Что вы ожидаете, когда произойдет, когда вы тогда позвоните strbuild.Append(...)
? Почему вы устанавливаете strbuild
на ноль вообще?
Вы, кажется, любите инициализацию двухстрочной переменной - вот еще один пример:
string str = null;
str = reader.ReadLine().ToString();
Это было бы легче прочитать, как просто:
string str = reader.ReadLine();
(ReadLine
уже возвращает строку, поэтому вам не нужно вызывать ToString()
для результата.)
Тем не менее, я делаю , чтобы вы использовали оператор using
для StreamReader
- в противном случае, когда возникнет исключение, вы оставите читателя открытым.
Одна приятная вещь в TextReader.ReadLine()
заключается в том, что она возвращает ноль, когда вы закончите. Вам не нужно заглядывать и , затем читать.
Наконец, если вы тестируете только один символ, вам не нужна подстрока - просто используйте индексатор строк, чтобы получить символ. Итак, вы можете иметь:
StringBuilder builder = new StringBuilder();
// Consider using File.OpenText
using (StreamReader reader = new StreamReader("buf.txt", Encoding.ASCII))
{
string line;
// Normally side-effect + test is ugly, but this is a common and
// neat idiom
while ((line = reader.ReadLine()) != null)
{
// TODO: What do you want to happen for empty lines?
char segment = str[0];
if (segment == 'A')
{
builder.Append(line);
}
else if (segment == 'B')
{
builder.Append("BET");
}
}
}
MessageBox.Show(builder.ToString());