2014-01-30 226 views
1

我不知道這是否是正確的標題,所以如果不是這樣的道歉!基類泛型和繼承類.NET

public class BaseException 
{ 
    public bool HasException { get; set; } 
    public string ExceptionMessage { get; set; } 
} 

我有其他類將從我的基類繼承:

public class BoolValue : BaseException 
{ 
    public bool Value { get; set; } 
} 

public class LongValue : BaseException 
{ 
    public bool Value { get; set; } 
} 

如有發生我有這將被用來存儲異常的基類

所以,當我把它稱爲,這將是

function LongValue MyFirstFunction() 
{ 
    LongValue data = new LongValue(); 

    try 
    { 
     data = ....  
    } 
    catch (Exception ex) 
    { 
     data = BuildException<LongValue>(ex, data); 
     return data; 
    } 
    finally 
    { 
     data = null; 
    } 
} 

function BoolValue MySecondFunction() 
{ 
    BoolValue data = new BoolValue(); 
    try 
    { 
     data = .... 
    } 
    catch (Exception ex) 
    { 
     data = BuildException<BoolValue>(ex, data); 
     return data; 
    } 
    finally 
    { 
     data = null; 
    } 
} 

我想創建通用的功能,我就可以集如果出現錯誤,但返回原班型即的longValue或異常細節LongBool這

protected T BuildException<T>(Exception exception, T obj) 
{ 

} 

但我知道如何設置的HasException和ExceptionMessage,因爲即使鑄塑編譯器告訴它不工作我,我可以一件T不能轉換爲BaseException

((BaseException)data).HasException = true; 

我想我的最終功能是這樣的:

protected T BuildException<T>(Exception exception, T data) 
{ 
    ((BaseException)data).HasException = true; 
    ((BaseException)data).ExceptionMessage = exception.Message; 
    return data; 
} 

有沒有一種方法,我可以做到這一點或我應該爲我的BaseException創建一個接口嗎?

謝謝。

+0

我不想把它放在我的答案,因爲這不是你的問題,但你確定你的設計是OK?名稱以'Exception'結尾的類不能從'Exception'類繼承,這可能不是一個好主意。 – MarcinJuraszek

回答

8
你的方法

generic constraint

protected T BuildException<T>(Exception exception, T data) where T : BaseException 
{ 
    data.HasException = true; 
    data.ExceptionMessage = exception.Message; 
    return data; 
}