C# GetBytes, WriteBytes и встроенная ошибка оператора

У меня есть проблема. Когда я запускаю свою программу, она придумывает ошибку, конкретно ошибка 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
задан JC Leyba 10 July 2010 в 21:24
поделиться

1 ответ

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

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

Проблема в том, что вы объявляете массив Byte[] вне блока intended 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); 
} 

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

2
ответ дан 2 September 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: