C# 基类泛型和继承类.NET

C# 基类泛型和继承类.NET,c#,generics,C#,Generics,我不知道这是不是正确的标题,所以如果不是,我道歉 我有一个基类,如果发生异常,它将用于存储异常: public class BaseException { public bool HasException { get; set; } public string ExceptionMessage { get; set; } } 我还有其他将从基类继承的类: public class BoolValue : BaseException { public bool Value

我不知道这是不是正确的标题,所以如果不是,我道歉

我有一个基类,如果发生异常,它将用于存储异常:

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;
    }
}
我希望我的最终函数是这样的:

protected T BuildException<T>(Exception exception, T data)
{
  ((BaseException)data).HasException = true;
  ((BaseException)data).ExceptionMessage = exception.Message;
  return data;
}
受保护的T构建异常(异常异常,T数据)
{
((BaseException)数据)。HasException=true;
((BaseException)数据).ExceptionMessage=exception.Message;
返回数据;
}
有没有一种方法可以实现这一点,或者我应该为我的BaseException创建一个接口

谢谢。

设置您的方法:

protected T BuildException<T>(Exception exception, T data) where T : BaseException
{
    data.HasException = true;
    data.ExceptionMessage = exception.Message;
    return data;
}
protectedt BuildException(异常异常,T数据),其中T:BaseException
{
data.HasException=true;
data.ExceptionMessage=exception.Message;
返回数据;
}

我不想把它放在我的答案中,因为这不是关于你的问题,但你确定你的设计是正确的吗?名称以
Exception
结尾的类,它不是从
Exception
类继承的,这可能不是一个好主意。
protected T BuildException<T>(Exception exception, T data)
{
  ((BaseException)data).HasException = true;
  ((BaseException)data).ExceptionMessage = exception.Message;
  return data;
}
protected T BuildException<T>(Exception exception, T data) where T : BaseException
{
    data.HasException = true;
    data.ExceptionMessage = exception.Message;
    return data;
}