如何使用Try和Catch来设置值
本文关键字:设置 Catch 何使用 Try | 更新日期: 2023-09-27 18:16:07
如何在Letter
内部调用try catch来调用Program
内部的try catch ?目前,我使用bool作为验证器,但我希望任何假bool抛出错误,并为Program
看到这一点。
最好的方法是什么,因为目前Program
不能告诉一个属性是否设置不正确。
Program.cs
Letter a = new Letter();
try
{
a.StoredChar = '2';
}
catch (Exception)
{
a.StoredChar = 'a';
}
// I want this to print 'a' because the '2' should throw a catch somehow
// I don't know how to set this up.
Console.WriteLine(a.StoredChar);
Letter.cs
class Letter
{
char storedChar;
public char StoredChar
{
set { validateInput(value);}
get { return storedChar;}
}
bool validateInput(char x)
{
if ( ( (int)x >= 65 && (int)x <= 90 ) || ( (int)x >= 97 && (int)x <= 122 ) )
{
storedChar = x;
return true;
}
else
{
return false;
}
}
}
在Letter类中抛出异常。像这样:
private void validateInput(char x)
{
if ( ( (int)x >= 65 && (int)x <= 90 ) || ( (int)x >= 97 && (int)x <= 122 ) )
{
storedChar = x;
}
else
{
throw new OutOfRangeException("Incorrect letter!");
}
}
我永远不会使用异常来驱动程序流。如果允许用户输入可能被错误地传递给Letter类的值那么你应该修改你的类,使ValidateInput方法公开并在尝试修改StoredChar
之前调用它char z = '2';
Letter a = new Letter();
if(!a.ValidateInput(z))
{
MessageBox.Show("Invalid data");
return;
}
a.StoredChar = z;
我不认为使用try catch
设置值是一个好主意,但根据您的要求,我认为setter可以这样:
void validateInput(char x)
{
if (((int)x >= 65 && (int)x <= 90 ) || ((int)x >= 97 && (int)x <= 122))
{
storedChar = x;
}
else
{
throw new SomeException();
}
}