自定义系统异常实例以传递两个参数

时间:2016-09-14 16:30:57

标签: c# exception parameter-passing

我需要在不使用用户定义的异常类的情况下自定义系统异常。

以下是我的要求。

gunzip MySQL-python-1.2.2.tar.gz
tar -xvf MySQL-python-1.2.2.tar
cd MySQL-python-1.2.2
python setup.py build
python setup.py install

然后我需要在项目中为上层抛出String ErrorMessage=""; Exception e= new Exception (ErrorMessage); 字符串和一个整数参数。

有人可以告诉我是否可以自定义系统Exception实例以传递两个参数(整数值和errorMessage字符串)?

3 个答案:

答案 0 :(得分:1)

一些真实的例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ExceptionExamples
{
    public static class Error
    {
        [Serializable]
        public class RegistryReadException : Exception
        {
            /// <summary>
            /// Message template
            /// </summary>
            static string msg = "Can't parse value from Windows Registry.\nKey: {0}\nValue: {1}\nExpected type: {2}";

            /// <summary>
            /// Can't read value from registry
            /// </summary>
            /// <param name="message"></param>
            public RegistryReadException(
                string message)
                : base(message) { }

            /// <summary>
            /// Can't read value from registry
            /// </summary>
            /// <param name="key">Key path</param>
            /// <param name="value">Real value</param>
            /// <param name="type">Expected type</param>
            public RegistryReadException(
                string key, string value, Type type)
                : base( string.Format(msg, key, value, type.Name) ) { }
        }
    }
}

答案 1 :(得分:0)

这根本不可能。

您唯一的选择是创建一个继承自System.Exception或其他异常类的新类,并在其中添加您需要的任何内容。

如果你不能或不能做到这一点,那么你就无法做你想做的事。

答案 2 :(得分:-1)

您可以创建一些自定义异常类,并使用相同的代码TryCatch抛出它。但是在上层,您可以使用自定义类型捕获通用异常。

Try
{
    //Your try code Here
    if(/*Something Happens*/)
    {
       throw new YourCustomExceptionClass("Message");
    }
    else
    {
       throw new AnotherCustomExceptionClass("Other Message");
    }
}
Catch(YourCustomExceptionClass err)
{
   //This will be a type of exception
}
Catch(AnotherCustomExceptionClass err)
{
   //This will be another type of Exception
}