我创建了这个类,它具有这个构造函数:
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用户定义的转换必须与封闭的
进行转换
出什么问题了?我该如何解决这个问题?
答案 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
本身而不是其基类中。
仅一种类型继承其他类型是不够的。它必须是完全匹配的类型。