C# 为什么布尔的默认值(false)无法识别?
使用此代码:C# 为什么布尔的默认值(false)无法识别?,c#,boolean,default,default-value,C#,Boolean,Default,Default Value,使用此代码: bool successfulSend; const string quote = "\""; string keepPrinterOn = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}off{0}", quote); string shutPrinterOff = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}on{0}", quote); str
bool successfulSend;
const string quote = "\"";
string keepPrinterOn = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}off{0}", quote);
string shutPrinterOff = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}on{0}", quote);
string advanceToBlackBar = string.Format("! U1 setvar {0}media.sense_mode{0} {0}bar{0}", quote);
string advanceToGap = string.Format("! U1 setvar {0}media.sense_mode{0} {0}gap{0}", quote);
if (radbtnBar.Checked)
{
successfulSend = SendCommandToPrinter(advanceToBlackBar);
}
else if (radbtnGap.Checked)
{
successfulSend = SendCommandToPrinter(advanceToGap);
}
if (successfulSend)
{
MessageBox.Show("label type command successfully sent");
}
public bool SendCommandToPrinter(string cmd)
{
bool success; // init'd to false by default
try
{
SerialPort serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.Open();
serialPort.Write(cmd);
serialPort.Close();
success = true;
}
catch // may not need a try/catch block, as success defaults to false
{
success = false;
}
return success;
}
我得到,使用未分配的局部变量“successfulSend”
因此,我必须将bool声明更改为:
bool successfulSend = false;
…以使其编译/运行。但是false不是bool[ean]的默认值吗?为什么必须显式指定默认值
没有对此代码的投诉:
bool successfulSend;
const string quote = "\"";
string keepPrinterOn = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}off{0}", quote);
string shutPrinterOff = string.Format("! U1 setvar {0}power.dtr_power_off{0} {0}on{0}", quote);
string advanceToBlackBar = string.Format("! U1 setvar {0}media.sense_mode{0} {0}bar{0}", quote);
string advanceToGap = string.Format("! U1 setvar {0}media.sense_mode{0} {0}gap{0}", quote);
if (radbtnBar.Checked)
{
successfulSend = SendCommandToPrinter(advanceToBlackBar);
}
else if (radbtnGap.Checked)
{
successfulSend = SendCommandToPrinter(advanceToGap);
}
if (successfulSend)
{
MessageBox.Show("label type command successfully sent");
}
public bool SendCommandToPrinter(string cmd)
{
bool success; // init'd to false by default
try
{
SerialPort serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.Open();
serialPort.Write(cmd);
serialPort.Close();
success = true;
}
catch // may not need a try/catch block, as success defaults to false
{
success = false;
}
return success;
}
使现代化
这包括:
bool success;
SerialPort serialPort = new SerialPort();
serialPort.BaudRate = 19200;
serialPort.Handshake = Handshake.XOnXOff;
serialPort.Open();
serialPort.Write(cmd);
serialPort.Close();
success = true;
return success;
但是false不是bool[ean]的默认值吗
对于字段实例变量和静态变量,是
但是局部变量没有默认值,无论其类型如何。在阅读之前,必须明确指定它们
但是false不是bool[ean]的默认值吗
对于字段实例变量和静态变量,是
但是局部变量没有默认值,无论其类型如何。在阅读之前,必须明确指定它们 你说可能不需要try/catch块是什么意思?@BoltClock:如果将success设置为true时出现问题,那么返回值不是false吗?请参阅上面的更新。不,如果发生未处理的异常,则该方法将中止,并且没有返回值。简单地说,在使用/返回变量之前,必须在所有路径中分配变量。@BoltClock:那么为什么我上面的更新代码会编译?你说的“可能不需要try/catch块”是什么意思?@BoltClock:如果将success设置为true时出现问题,返回值是否会为false?请参阅上面的更新。不,如果发生未处理的异常,则该方法将中止,并且没有返回值。简单地说,必须在所有路径中分配变量,然后才能使用/返回它们。@BoltClock:那么为什么我上面的更新代码要编译?例外是用于从方法接收out参数的局部变量。如果没有控制流会绕过对带有out参数的方法的调用,则不需要明确地分配它们。@martin_costello:这一点也不例外。这只是确定赋值规则的一部分。根据C5规范第5.3.3.22节:如果变量v作为out参数传递,即任何参数中形式为“out v”的参数,则expr后的v状态被明确指定。否则expr之后的v状态与argn之后的v状态相同。从c5 spec@JonSkeet的第5.3.3.22节来看,我的意思是它们不必像var x=blah那样由用户在代码中明确指定,但是,从技术上讲,它们最终会被指定一个确定的值,除非首先有例外。@martin_costello:这个术语“确定指定”是一个技术术语,我就是从这个技术意义上使用它的。例如,非out参数在方法输入时被明确指定,但out参数不是。。。还要注意的是,即使没有它,在某些情况下,变量也可以在没有赋值语句的情况下被明确赋值:foox;如果Foo是一个没有字段的结构,则保留x的明确赋值。例外是用于从方法接收out参数的局部变量。如果没有控制流会绕过对带有out参数的方法的调用,则不需要明确地分配它们。@martin_costello:这一点也不例外。这只是确定赋值规则的一部分。根据C5规范第5.3.3.22节:如果变量v作为out参数传递,即任何参数中形式为“out v”的参数,则expr后的v状态被明确指定。否则expr之后的v状态与argn之后的v状态相同。从c5 spec@JonSkeet的第5.3.3.22节来看,我的意思是它们不必像var x=blah那样由用户在代码中明确指定,但是,从技术上讲,它们最终会被指定一个确定的值,除非首先有例外。@martin_costello:这个术语“确定指定”是一个技术术语,我就是从这个技术意义上使用它的。例如,非out参数在方法输入时被明确指定,但out参数不是。。。还要注意的是,即使没有它,在某些情况下,变量也可以在没有赋值语句的情况下被明确赋值:foox;如果Foo是一个没有字段的结构,则保留x的明确赋值。