2015-10-09 3 views
4

После некоторых исследований я обнаружил, что пользовательское исключение должно выглядеть следующим образом:Пользовательские исключения со свойствами

using System; 
using System.Runtime.Serialization; 

namespace YourNamespaceHere 
{ 
    [Serializable()] 
    public class YourCustomException : Exception, ISerializable 
    { 
     public YourCustomException() : base() { } 
     public YourCustomException(string message) : base(message) { } 
     public YourCustomException(string message, System.Exception inner) : base(message, inner) { } 
     public YourCustomException(SerializationInfo info, StreamingContext context) : base(info, context) { } 
    } 
} 

Но у меня есть небольшая проблема.

Я хочу, чтобы исключение выше, чтобы иметь два дополнительных поля, скажем int ID и int ErrorCode. Как добавить эти два поля и инициализировать их? Должен ли я добавить новый конструктор с этими двумя параметрами и параметром сообщения?

Также вы можете помочь мне и показать, как написать методы сериализации для этого нового класса, который будет иметь два новых свойства?

спасибо.

+1

Просто добавьте свойства в класс – singsuyash

+0

нашел это http://blogs.msdn.com/b/agileer/archive/2013/05/17/the-right- way-to-write-a-custom-exception-class.aspx – singsuyash

+0

@singsuyash: Должен ли я добавить * новый * конструктор, который принимает сообщение и два целых числа? Будет хорошо, если кто-то может подвести итог этим вещам и то, что вы связываете в качестве ответа для моего класса с этими двумя целыми свойствами. –

ответ

4

Это будет выглядеть примерно так. Вы смотрите подробнее здесь What is the correct way to make a custom .NET Exception serializable?

[Serializable()] 
     public class YourCustomException : Exception, ISerializable 
     { 
      public Int Id { get; set; } 
      public Int ErrorCode { get; set; } 
      public YourCustomException() : base() { } 
      public YourCustomException(string message) : base(message) { } 
      public YourCustomException(string message, System.Exception inner) : base(message, inner) { } 
      public YourCustomException(SerializationInfo info, StreamingContext context) : base(info, context) { } 
      public YourCustomException(string message, int Id, int ErrorCode) 
       : base(message) 
      { 
       this.Id = Id; 
       this.ErrorCode = ErrorCode; 
      } 
     } 
+0

Могу ли я добавить некоторые специальные методы в свой класс исключения? –

+0

После того, как вы поймаете свое обычное исключение, вы можете вызвать эти методы. Я хотел бы знать, что будет делать в этом методе. Готовы ли вы получить необработанное исключение или перейти на другой улов, если этот метод выдает исключение. – singsuyash

+0

@singsuyash: этот метод, вероятно, только инициализирует переменные-члены какого-либо объекта класса, которые будут переданы этому методу –

Смежные вопросы