我有一个通用的结果类
我想编写一个隐式运算符函数,这样我就可以将 Result-T 转换为 Result-V,但我不知道该怎么做。
public class Result<T>
{
public bool IsSuccess { get; set; }
public List<string> Messages { get; set; }
public T? Data { get; set; }
public static implicit operator Result<T>(Result<V> v)
{
if(v.Data !=null){
throw new Exception("Cannot convert ServiceResult<V> to ServiceResult<T> when V is not null");
}
return new ServiceResult<T>
{
IsSuccess = v.IsSuccess,
Messages = v.Messages,
Data = default(T)
};
}
}
我想在类似的情况下使用它
public Result<string> RandomFunction(){
...
Result<int> countResult = GetCount();
if (!countResult.IsSuccess)
{
return countResult;
}
...
}
对于编译器来说,
Result<T>
和Result<V>
是相同的类型,而C#不允许为相同类型定义用户定义的转换。您可以将参数类型或返回类型更改为构造类型:
public static implicit operator Result<T>(Result<int> v)
public static implicit operator Result<string>(Result<T> v)
或使用通用方法:
public Result<T> Cast<V>(Result<V> v)