C# 抓住论点
我对c#和使用try{}cathch{}的想法比较陌生。在下面的代码中,只要文本框中有一个有效的整数,我就希望执行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);
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。请参阅,以获取有关这一点为何重要的信息。此代码位于返回字节数组的方法内部。所以我想我不能直接返回。不管怎样,我只是提前返回字节数组。它工作起来就像我希望它静止一样