加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 通用转换

发布时间:2020-12-15 05:39:25 所属栏目:百科 来源:网络整理
导读:基本上我正在做的是从Exception转换为GenericFaultException类(下面的代码片段使用C#作为语言. 请参阅以下详细信息 FaultExceptionT:FaultException(FaultException derived from exception)FaultException:Exception 我使用下面的代码行创建了一个faultExce
基本上我正在做的是从Exception转换为GenericFaultException类(下面的代码片段使用C#作为语言.

请参阅以下详细信息

FaultException<T>:FaultException(FaultException derived from exception)

FaultException:Exception

我使用下面的代码行创建了一个faultExceptionObject

public class ValidationFault: IValidationFault
{
}

FaultException<ValidationFault> faultExceptionObject=new FaultException<ValidationFault>(new ValidationFault())

我有一个错误处理层,它对ValidationFault类没有任何了解,只知道IValidationFault.

public Exception HandleException(Exception exception,Guid handlingInstanceId)
{    
  FaultException<IValidationFault> genericFaultException = exception as FaultException<IValidationFault>;
   //********genericFaultException is always NULL**********************
   IValidationFault fault = genericFaultException.Detail as IValidationFault;
 }

由于某种原因,该行:

FaultException<IValidationFault> genericFaultException = exception as FaultException<IValidationFault>;

genericFaultException的结果总是等于null,但是从QuickWatch我看到Exception的类型是FaultException< ValidationFault>.我应该如何从Exception转换为FaultException< IValidationFault>?

如果您需要更多信息,请与我们联系.

提前致谢

解决方法

作为FaultException的原因异常< IValidationFault>为null是因为FaultException< ValidationFault>不是FaultException< IValidationFault>.

要使此操作按您的方式工作,FaultException< T>必须写,以便T是协变的.但你不能在c#中为类做到这一点.你必须使用一个界面.这是一个应该工作的例子:

public interface IFaultException<out T>
{
    T Detail { get; }
}

public class FaultException<T> : Exception,IFaultException<T>
{
    private T _detail;
    public T Detail { get { return _detail; } }
    public FaultException(T detail,string message,Exception innerException)
    : base(message,innerException)
    {
       _detail = detail;
    }
}

使用此类和接口,您可以在错误处理代码中执行以下操作:

IFaultException<IValidationFault> genericFaultException =
    exception as IFaultException<IValidationFault>;

这是因为您的异常(您知道它实际上是一个FaultException< ValidationFault>)实现了IFaultException< ValidationFault>.由于IFaultException< T>对于T是协变的,这意味着任何IFaultException< ValidationFault>也可以用作IFaultException< IValidationFault>.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读