Ich habe eine Klasse enthält also eine Ausnahme, so.Überschreiben Sie die 'ist' Funktionalität
public class ExceptionWrapper
{
public string TypeName { get; set; }
public string Message { get; set; }
public string InnerException { get; set; }
public string StackTrace { get; set; }
public ExceptionWrapper() { }
public ExceptionWrapper(Exception ex)
{
TypeName = String.Format("{0}.{1}", ex.GetType().Namespace, ex.GetType().Name);
Message = ex.Message;
InnerException = ex.InnerException != null ? ex.InnerException.Message : null;
StackTrace = ex.StackTrace;
}
public bool Is(Type t)
{
var fullName = String.Format("{0}.{1}", t.Namespace, t.Name);
return fullName == TypeName;
}
}
Ich möchte das außer Kraft setzen 'ist' Aktion, also anstatt das zu tun, so
if (ex.Is(typeof(Validator.ValidatorException)) == true)
Ich werde tun, so
if (ex is Validator.ValidatorException)
Ist es möglich? Wie?
Sie können entfernen Sie den '== true' Teil ohnehin seit Ihrem' Is' Methode a gibt ' bool'. Auch der Methodenname gibt an, dass der Rückgabewert ein boolescher Wert wäre, so dass es nicht notwendig ist, ihn durch eine explizite Überprüfung auf "wahr" zu klären. –
Es ist nicht cool, Typen durch den Vergleich ihrer Namenszeichenfolgen zu vergleichen.Die übliche Vorgehensweise ist 'a is MyType', wenn Sie testen möchten, ob' a' einen Laufzeittyp hat, der mit 'MyType' durch Vererbung (einschließlich Boxing/Unboxing) oder generische Varianz kompatibel ist. Wenn Sie nach einem genauen Laufzeittyp suchen möchten, verwenden Sie stattdessen 'a! = Null && a.GetType() == typeof (MyType)'. Wie gesagt, vergleiche keine Strings. –
@Jeppe Ich kann den ursprünglichen Typ des Fehlers nicht erhalten, da es in dieser Wrapper-Klasse über WCF übertragen wird. – Yacov