gpt4 book ai didi

c# - 基类 Generic 和继承类 .NET

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:30 25 4
gpt4 key购买 nike

我不知道这是否是正确的标题,如果不正确,我深表歉意!

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

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 创建一个接口(interface)?

谢谢。

最佳答案

设置generic constraint在你的方法上:

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

关于c# - 基类 Generic 和继承类 .NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com