无法使用自定义属性创建自定义异常类构造函数

时间:2018-05-14 21:40:44

标签: c# .net custom-exceptions

当我尝试为自定义异常类设置以下构造函数时,我不理解编译错误:

[Serializable]
        class AuthenticationException : Exception
        {
            public int PracticeID { get; set; }

            public AuthenticationException()
                : base() { }

            public AuthenticationException(string message)
                : base(message) { }

            public AuthenticationException(string message, Exception InnerException)
                : base(message, InnerException) { }

            public AuthenticationException(SerializationInfo info, StreamingContext context) 
                : base(info, context) { }

            public  AuthenticationException(int PracticeID)
                : base(PracticeID)
            {
                this.PracticeID = PracticeID;
            }
        }

我得到的错误如下:

  

最佳重载方法匹配   'System.Exception.Exception(string)'有一些无效的参数

&安培;

  

无法从'int'转换为'string'

两者都发生在类的基础(PracticeID)部分。

我不明白为什么它在这里寻找一个字符串。

我试着寻找答案并提出这两个先前提出的问题

Custom exception with properties

What is the correct way to make a custom .NET Exception serializable?

我不确定我的做法与导致错误的第一个不同,我尝试阅读/复制第二个,但我完全失去了。

此异常将在内部循环中发生,我希望在外部循环上有一个客户错误捕获块来处理这种特殊情况。

我认为解决方法只是使用异常类的Data属性,并在外部循环的catch块中检查是否有一个名为“Authenticate”的项目的键,并在那里处理异常。

我不想那样做,因为那种排序异常处理是自定义异常类的意图。

1 个答案:

答案 0 :(得分:2)

基本异常类没有匹配的构造函数。

相反,更改代码以调用空构造函数(选项A),或者使用id提供默认错误消息(选项B):

[Serializable]
class AuthenticationException : Exception
{
    public int PracticeId { get; }

        // Other constructors

    // Option A
    public AuthenticationException(int practiceId)
        : base()
    {
        PracticeId = practiceId;
    }

    // Option B
    public AuthenticationException(int practiceId)
        : base("Invalid id: " + practiceId)
    {
        PracticeId = practiceId;
    }
}