用户定义的转换必须在asp core 2.2中转换为封闭类型或从封闭类型转换

时间:2019-03-22 15:01:55

标签: c# asp.net asp.net-core

我创建了这个类,它具有这个构造函数:

 public class ReturnResult : ImplicitReturnResult
{
    public bool Success { get; }
    public ResultStatus Status { get; }
    public string Message { get; }

    public ReturnResult(bool Success, ResultStatus Status, string Message = null)
    {
        this.Success = Success;
        this.Status = Status;
        this.Message = Message ?? Status.ToDisplay();
    }


}

在这个类中,我需要使用该类的构造函数:

 public class ImplicitReturnResult
{
    public static implicit operator ReturnResult(OkResult result)
    {
        return new ReturnResult(true, ResultStatus.Success);
    }
}

我使用此代码,但它向我显示此错误:

  

错误CS0556用户定义的转换必须与封闭的

进行转换

出什么问题了?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

为了使C#编译器不必从 all 引用的程序集中搜索 all 类型来查找是否存在用于转换的特定用户定义运算符,规则是任何用户定义的转换的输入 parameter 返回类型必须与定义运算符的类型匹配。

public class ImplicitReturnResult
{
    public static implicit operator ReturnResult(OkResult result)
    {
        return new ReturnResult(true, ResultStatus.Success);
    }
}

此运算符的返回类型(ReturnResult)和参数(OkResult)都不是ImplicitReturnResult。这就是为什么不允许这样做的原因。您需要将此运算符移到ReturnResult本身而不是其基类中。

仅一种类型继承其他类型是不够的。它必须是完全匹配的类型。