Mam klasy, więc zawiera wyjątek, tak jak.Zastępowanie funkcji "jest"
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;
}
}
Chcę zastąpić działania 'jest', więc robią tak
if (ex.Is(typeof(Validator.ValidatorException)) == true)
zamiast Zrobię tak
if (ex is Validator.ValidatorException)
Czy to możliwe? W jaki sposób?
można usunąć '== TRUE udział w każdym razie, ponieważ Twój' metoda Is' zwraca ' bool'. Również nazwa metody wskazuje, że zwracana wartość będzie wartością boolowską, więc nie ma potrzeby jej wyjaśniania poprzez jawne zaznaczenie "true". –
Nie jest fajnie porównywać typy poprzez porównywanie ich łańcuchów nazw.Zwykle jest to 'a to MyType', jeśli chcesz przetestować, czy' a' ma działający typ kompatybilny z 'MyType' poprzez dziedziczenie (włączając w to boxing/unboxing) lub ogólną wariancję. Jeśli chcesz sprawdzić dokładny typ działania, użyj zamiast niego 'a! = Null && a.GetType() == typeof (MyType)'. Jak już powiedziałem, nie porównuj ciągów. –
@Jeppe Nie mogę uzyskać oryginalnego typu błędu, ponieważ jest to transfer w tej klasie opakowania za pośrednictwem WCF. – Yacov