繁体   English   中英

基类泛型和继承类.NET

[英]Base class Generic and inheritance class .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创建一个接口?

谢谢。

在您的方法上设置通用约束

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM