在我的C#书中的示例后,我遇到了一个在Visual Studio中不起作用的书籍示例。它涉及创建自己的异常,尤其是阻止你取负数的平方根。但是,当我使用“throw new”创建NegativeNumberException时,我收到一条错误消息“无法找到类型或命名空间名称'NegativeNumberException'(您是否缺少using指令或程序集引用?)”
如果这不是正确的方法,我如何创建自己的例外?也许我的书已经过时了?这是代码:
class SquareRootTest
{
static void Main(string[] args)
{
bool continueLoop = true;
do
{
try
{
Console.Write("Enter a value to calculate the sqrt of: ");
double inputValue = Convert.ToDouble(Console.ReadLine());
double result = SquareRoot(inputValue);
Console.WriteLine("The sqrt of {0} is {1:F6)\n", inputValue, result);
continueLoop = false;
}
catch (FormatException formatException)
{
Console.WriteLine("\n" + formatException.Message);
Console.WriteLine("Enter a double value, doofus.\n");
}
catch (NegativeNumberException negativeNumberException)
{
Console.WriteLine("\n" + negativeNumberException.Message);
Console.WriteLine("Enter a non-negative value, doofus.\n");
}
} while (continueLoop);
}//end main
public static double SquareRoot(double value)
{
if (value < 0)
throw new NegativeNumberException(
"Square root of negative number not permitted.");
else
return Math.Sqrt(value);
}
}
答案 0 :(得分:51)
Exception
只是一个类,与.Net中的许多其他类一样。恕我直言,有两个棘手的事情,用户定义的例外:
类似的东西:
public class NegativeNumberException: Exception {
/// <summary>
/// Just create the exception
/// </summary>
public NegativeNumberException()
: base() {
}
/// <summary>
/// Create the exception with description
/// </summary>
/// <param name="message">Exception description</param>
public NegativeNumberException(String message)
: base(message) {
}
/// <summary>
/// Create the exception with description and inner cause
/// </summary>
/// <param name="message">Exception description</param>
/// <param name="innerException">Exception inner cause</param>
public NegativeNumberException(String message, Exception innerException)
: base(message, innerException) {
}
/// <summary>
/// Create the exception from serialized data.
/// Usual scenario is when exception is occured somewhere on the remote workstation
/// and we have to re-create/re-throw the exception on the local machine
/// </summary>
/// <param name="info">Serialization info</param>
/// <param name="context">Serialization context</param>
protected NegativeNumberException(SerializationInfo info, StreamingContext context)
: base(info, context) {
}
}
答案 1 :(得分:5)
所有异常都是类似于其他异常的类型,如果你想定义一个自定义类型的异常,你实际上必须为它创建一个类:
/* You could also use ArgumentException, etc. */
class NegativeNumberException : Exception {
…
}
…
答案 2 :(得分:2)
由于来自Exception
而不是ApplicationException
的.NET 3.0自定义异常should be derived,所以请使用:
public class NegativeNumberException : Exception
{
public NegativeNumberException():base() { }
public NegativeNumberException (string message): base(message) { }
}
答案 3 :(得分:1)
您需要声明自定义的异常NegativeNumberException
类。
所有自定义异常都是异常的子类,因此从NegativeNumberException
类
Exception
类
来自MSDN:
如果您正在设计需要创建自己的应用程序 例外情况,建议您从中派生自定义异常 异常类。它最初被认为是自定义异常 应该从ApplicationException类派生;但在实践中 这还没有被发现增加显着的价值。更多 信息,请参阅处理例外的最佳实践。 ApplicationException使用HRESULT COR_E_APPLICATION,它具有 值0x80131600。
试试这个:
public class NegativeNumberException : Exception
{
public NegativeNumberException():base()
{
}
public NegativeNumberException (string message): base(message)
{
}
}