2016-09-14 1 views
-1

Ich muss die Systemausnahme anpassen, ohne die benutzerdefinierten Ausnahmeklassen zu verwenden.Anpassen der Systemausnahmeinstanz, um zwei Parameter zu übergeben

Folgendes ist meine Anforderung.

String ErrorMessage=""; 
Exception e= new Exception (ErrorMessage); 

dann brauche ich errorMessage String mit einem Integer-Parameter für die obere Schicht in meinem Projekt zu werfen.

Kann mir bitte jemand Bescheid geben, wenn ich die Exception-Instanz des Systems anpassen kann, um zwei Parameter zu übergeben (Integer-Wert und errorMessage String)?

+1

können Sie nicht. Sie können nur eine Unterklasse erstellen und einen neuen Konstruktor hinzufügen, der beide Parameter akzeptiert. –

+0

In aller Fairness solltest du wirklich * System.Exception' nicht werfen. Dies ist im Grunde nur der Großvater aller gemanagten Ausnahmen, es sollte nie direkt geworfen werden und fast nie behandelt werden. Der ** korrekte ** Weg, um das zu tun, was Sie wollen, besteht darin, eine existierende Ausnahme abzuleiten und Ihre Eigenschaften und Konstruktoren dort hinzuzufügen. –

Antwort

-1

Sie können einige benutzerdefinierte Exception-Klassen erstellen und sie mit dem gleichen Code TryCatch werfen. Aber in der oberen Schicht können Sie nicht durch generische Exception abfangen, indem Sie Ihren benutzerdefinierten Typ verwenden.

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 
} 
+0

Die Frage * specifically * sagte, dass er keine neue Ausnahmeklasse erstellen wollte. – Servy

+0

Ich möchte eine Liste oder ein Array von Parametern nur mit der Ausnahmeklasse C# system übergeben. weil ich die customize-Ausnahmeklasse aufgrund einiger Einschränkungen in meinen Projekten nicht verwenden kann. – Gobi

0

Dies ist einfach nicht möglich.

Ihre einzige Option besteht darin, eine neue Klasse zu erstellen, die von System.Exception oder einer anderen Ausnahmeklasse erbt, und fügen Sie dort, was Sie brauchen, hinzu.

Wenn Sie das nicht können oder wollen, können Sie nicht tun, was Sie wollen.

0

Einige reales Beispiel:

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)) { } 
     } 
    } 
} 
Verwandte Themen