隐式转换泛型类型

问题描述 投票:0回答:1

我有一个通用的结果类

我想编写一个隐式运算符函数,这样我就可以将 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;
    }  
    ...    
}

c# generics implicit-conversion implicit
1个回答
0
投票

对于编译器来说,

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)
© www.soinside.com 2019 - 2024. All rights reserved.