C # GetBytes, WriteBytes и ошибка встроенного оператора - PullRequest
1 голос
/ 11 июля 2010

У меня проблема. Когда я запускаю свою программу, возникает ошибка, в частности ошибка CS1023. Я думаю, это потому, что у меня есть объявление внутри оператора, но я не знаю, как еще написать код. Иногда C # раздражает меня, потому что в C ++ я мог сходить с подобных вещей ... в любом случае, вот код. Буду признателен, если кто-нибудь сможет мне это объяснить. Ссылка на сообщение об ошибке

void BtnTotalSeasonsClick(object sender, EventArgs e)
{
    using (var stream = new FileStream(drvFile, FileMode.Open, FileAccess.ReadWrite)) 
    Byte[] bytes = System.Text.ASCIIEncoding.GetBytes(txtTotalSeasons.Text);
    {
        stream.Position = 4;
        Stream.WriteByte(0xCD);
    }
}

Фиксированный код с ошибкой CS0120.

        {
using (var stream = new FileStream(drvFile, FileMode.Open, FileAccess.ReadWrite))  
{ 
Byte[] bytes = System.Text.ASCIIEncoding.GetBytes(txtTotalSeasons.Text); 
stream.Position = 4; 
Stream.WriteByte(0xCD); 
} 
    }

1 Ответ

2 голосов
/ 11 июля 2010

Нет ничего плохого в вставленном вами коде. Возможно, ошибка где-то еще выше этого, и компилятор запутался?

Ах, я вижу, вы изменилиськод.

Проблема здесь в том, что вы объявляете массив Byte[] вне блока , предназначенного using.Так как область объявления как есть - только одна строка, это составляет логическую ошибку, и компилятор перехватывает ее с ошибкой времени компиляции.

Компилятор интерпретирует ваш код следующим образом:

using (var stream = new FileStream(drvFile, FileMode.Open, FileAccess.ReadWrite))  
{ 
    Byte[] bytes = System.Text.ASCIIEncoding.GetBytes(txtTotalSeasons.Text); 
}

{        
    stream.Position = 4; 
    stream.WriteByte(0xCD); 
}

Чтобы исправить это, переместите Byte[] внутри фигурных скобок или за пределы блока using:

using (var stream = new FileStream(drvFile, FileMode.Open, FileAccess.ReadWrite))  
{ 
    Byte[] bytes = System.Text.ASCIIEncoding.GetBytes(txtTotalSeasons.Text); 
    stream.Position = 4; 
    stream.WriteByte(0xCD); 
} 

-или-

Byte[] bytes = System.Text.ASCIIEncoding.GetBytes(txtTotalSeasons.Text); 

using (var stream = new FileStream(drvFile, FileMode.Open, FileAccess.ReadWrite))  
{ 
    stream.Position = 4; 
    stream.WriteByte(0xCD); 
} 

Лично якак то, что компилятор раздражает меня, так как это спасает меня от ошибки времени выполнения.

...