Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么布尔的默认值(false)无法识别?_C#_Boolean_Default_Default Value - Fatal编程技术网

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的明确赋值。