Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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# 抓住论点_C#_Arguments_Try Catch - Fatal编程技术网

C# 抓住论点

C# 抓住论点,c#,arguments,try-catch,C#,Arguments,Try Catch,我对c#和使用try{}cathch{}的想法比较陌生。在下面的代码中,只要文本框中有一个有效的整数,我就希望执行try。我已经设置了文本框,所以不能输入非整数字符,整数不能太高,所以这不是问题。如果该文本框留空,则代码应该跳转到catch,它会这样做。但是,我想知道这个catch应该使用什么参数,以及是否可以将if(samplingRate==0)以某种方式移动到catch try { int samplingRate = int.Parse(tbSamplingRate.Text);

我对c#和使用try{}cathch{}的想法比较陌生。在下面的代码中,只要文本框中有一个有效的整数,我就希望执行
try
。我已经设置了文本框,所以不能输入非整数字符,整数不能太高,所以这不是问题。如果该文本框留空,则代码应该跳转到catch,它会这样做。但是,我想知道这个catch应该使用什么参数,以及是否可以将
if(samplingRate==0)
以某种方式移动到catch

try
{
    int samplingRate = int.Parse(tbSamplingRate.Text); // sampling rate bytes
    if(samplingRate == 0)
    {
        MessageBox.Show("Sampling Rate Cannot Equal Zero");
        improperDataEntry = 1;
    }

    int sr1 = samplingRate / (16 * 16 * 16);
    samplingRate = samplingRate - sr1 * (16 * 16 * 16);
    int sr2 = samplingRate / (16 * 16);
    samplingRate = samplingRate - (sr2 * 16 * 16);
    int sr3 = samplingRate / 16;
    samplingRate = samplingRate - sr3 * 16;
    int sr4 = samplingRate;
    int srByte1 = sr1 * 16 + sr2;
    int srByte2 = sr3 * 16 + sr4;

    if (Convert.ToByte(srByte1) == 0xC0) // this handles if a C0 or a DB is encountered
    {
        sendPackage.Add(0xDB);
        sendPackage.Add(0xDC);
    }
    else if (Convert.ToByte(srByte1) == 0xDB)
    {
        sendPackage.Add(0xDB);
        sendPackage.Add(0xDD);
    }
    else
        sendPackage.Add(Convert.ToByte(srByte1));

    if (Convert.ToByte(srByte2) == 0xC0) // this handles if a C0 or a DB is encountered
    {
        sendPackage.Add(0xDB);
        sendPackage.Add(0xDC);
    }
    else if (Convert.ToByte(srByte2) == 0xDB)
    {
        sendPackage.Add(0xDB);
        sendPackage.Add(0xDD);
    }
    else
        sendPackage.Add(Convert.ToByte(srByte2));
}
catch
{
    improperDataEntry = 1;
    MessageBox.Show("Please enter a sampling rate.");
}

通常,您应该避免对控制流使用try/catch。只能在特殊或意外情况下使用。相反,使用TryParse确定是否可以解析该数字。此外,如果验证未通过,请不要害怕提前返回

int samplingRate;
bool ok = int.TryParse(tblSamplingRate.Text, out samplingRate);
if (!ok)
{
    MessageBox.Show("Please enter a valid number.");
    improperDataEntry = 1;
    return;
}
if(samplingRate == 0)
{
    MessageBox.Show("Sampling Rate Cannot Equal Zero");
    improperDataEntry = 1;
    return;
}

如果您坚持使用
try
块,您将希望捕获。通过检查,您可以看到Parse会抛出什么异常。

通常,您应该避免对控制流使用try/catch。只能在特殊或意外情况下使用。相反,使用TryParse确定是否可以解析该数字。此外,如果验证未通过,请不要害怕提前返回

int samplingRate;
bool ok = int.TryParse(tblSamplingRate.Text, out samplingRate);
if (!ok)
{
    MessageBox.Show("Please enter a valid number.");
    improperDataEntry = 1;
    return;
}
if(samplingRate == 0)
{
    MessageBox.Show("Sampling Rate Cannot Equal Zero");
    improperDataEntry = 1;
    return;
}

如果您坚持使用
try
块,您将希望捕获。通过检查,您可以看到Parse会抛出什么异常。

我根本不会使用try/catch-我会使用
int.TryParse
,这样您就可以在不使用异常的情况下检测无效输入。@Daisy Shipton,这只是返回布尔值吗?如果是这样,我猜您认为最好只使用一些If,else语句来处理这个问题?它返回一个
bool
,但将解析后的值存储在
out
参数中。因此,是的,您可以使用
if
语句来尝试解析值,报告错误并在必要时提前返回-然后继续执行。我根本不会使用try/catch来完成此操作-我会使用
int.TryParse
,这样您就可以在不使用异常的情况下检测无效输入。@Daisy Shipton,这只是返回bool吗?如果是这样,我猜您认为最好只使用一些If,else语句来处理这个问题?它返回一个
bool
,但将解析后的值存储在
out
参数中。是的,您可以使用
if
语句尝试解析值,报告错误并在必要时提前返回-然后继续执行其他操作。谢谢,我会这样做,但将第二个if更改为else if,然后在末尾添加一个else,如果一切都有效,它将执行。如果在验证失败时调用
return
,则不需要使用else。请参阅,以获取有关这一点为何重要的信息。此代码位于返回字节数组的方法内部。所以我想我不能直接返回。不管怎样,我只是提前返回字节数组。它的工作原理就像我希望它仍然感谢您,我会这样做,但将第二个if更改为else if,然后在末尾添加一个else,如果所有内容都有效,则将执行。如果在验证失败时调用
return
,则不需要else。请参阅,以获取有关这一点为何重要的信息。此代码位于返回字节数组的方法内部。所以我想我不能直接返回。不管怎样,我只是提前返回字节数组。它工作起来就像我希望它静止一样