Ответ 1
Компилятор не знает, что Environment.Exit() собирается завершить работу программы; он просто видит, что вы выполняете статический метод для класса. Просто инициализируйте queue
null, когда вы его объявите.
Queue queue = null;
Я не уверен, почему я получаю эту ошибку, но не должен ли этот код компилироваться, так как я уже проверяю, инициализируется ли очередь?
public static void Main(String[] args)
{
Byte maxSize;
Queue queue;
if(args.Length != 0)
{
if(Byte.TryParse(args[0], out maxSize))
queue = new Queue(){MaxSize = maxSize};
else
Environment.Exit(0);
}
else
{
Environment.Exit(0);
}
for(Byte j = 0; j < queue.MaxSize; j++)
queue.Insert(j);
for(Byte j = 0; j < queue.MaxSize; j++)
Console.WriteLine(queue.Remove());
}
Итак, если очередь не инициализирована, то петли for не достижимы правильно? Поскольку программа уже завершается с помощью Environment.Exit(0)?
Надеюсь, я могу дать мне несколько указателей:)
Спасибо.
Компилятор не знает, что Environment.Exit() собирается завершить работу программы; он просто видит, что вы выполняете статический метод для класса. Просто инициализируйте queue
null, когда вы его объявите.
Queue queue = null;
Компилятор не знает, что Environment.Exit() не возвращается. Почему бы не просто "вернуться" из Main()?
Несколько способов решения проблемы:
Просто замените Environment.Exit с возвратом. Компилятор знает, что return завершает метод, но не знает, что делает Environment.Exit.
static void Main(string[] args) {
if(args.Length != 0) {
if(Byte.TryParse(args[0], out maxSize))
queue = new Queue(){MaxSize = maxSize};
else
return;
} else {
return;
}
Конечно, вы действительно можете просто уйти от этого, потому что во всех случаях вы используете 0 в качестве кода выхода. Действительно, вы должны вернуть int вместо использования Environment.Exit. Для этого конкретного случая это был бы мой предпочтительный метод
static int Main(string[] args) {
if(args.Length != 0) {
if(Byte.TryParse(args[0], out maxSize))
queue = new Queue(){MaxSize = maxSize};
else
return 1;
} else {
return 2;
}
}
Инициализировать очередь до нуля, что на самом деле просто компилятор трюк, в котором говорится: "Я выясню свои собственные неинициализированные переменные, спасибо вам большое". Это полезный трюк, но в этом случае мне это не нравится - у вас слишком много ветвей, чтобы легко проверить, что вы делаете это правильно. Если вы действительно хотели сделать это таким образом, что-то вроде этого было бы яснее:
static void Main(string[] args) {
Byte maxSize;
Queue queue = null;
if(args.Length == 0 || !Byte.TryParse(args[0], out maxSize)) {
Environment.Exit(0);
}
queue = new Queue(){MaxSize = maxSize};
for(Byte j = 0; j < queue.MaxSize; j++)
queue.Insert(j);
for(Byte j = 0; j < queue.MaxSize; j++)
Console.WriteLine(queue.Remove());
}
Добавить оператор return после Environment.Exit. Опять же, это скорее компиляторный трюк, но немного более легитимный IMO, потому что он добавляет семантику для людей (хотя он будет держать вас от этого хваленых 100% -ного охвата кода)
static void Main(String[] args) {
if(args.Length != 0) {
if(Byte.TryParse(args[0], out maxSize)) {
queue = new Queue(){MaxSize = maxSize};
} else {
Environment.Exit(0);
return;
}
} else {
Environment.Exit(0);
return;
}
for(Byte j = 0; j < queue.MaxSize; j++)
queue.Insert(j);
for(Byte j = 0; j < queue.MaxSize; j++)
Console.WriteLine(queue.Remove());
}
Компилятор знает, что код доступен или недоступен, если вы используете "return". Подумайте о Environment.Exit() как функцию, которую вы вызываете, и компилятор не знает, что он закроет приложение.
SqlConnection con; SqlCommand com; con = new SqlConnection ( "Источник данных =.\SQLEXPRESS; AttachDbFilename =" + Server.MapPath( "~\App_Data\Database.mdf" ) + "; Integrated Security = True; Пользовательский экземпляр = True" ); con.Open();
com = new SqlCommand("insert into blog values(@b)", con);
//com.Parameters.AddWithValue("@a", TextBox1.Text);
com.Parameters.AddWithValue("@b",TextBox2.Text);
com.ExecuteNonQuery();
con.Close();
TextBox1.Visible = true;
SqlDataReader DR1;
while (DR1.Read())
{
TextBox1.Text = DR1[1].ToString();
}
появляется ошибка, которая использует непризнанные локальные переменные.