2014-01-30 192 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; 
}