Return grpc C# 中的枚举类型

Return Enum type in grpc C#

我写了一个 grpc 服务,return在其中一个服务上有一个枚举类型的消息

GRPC 原型:

syntax = "proto3";
package TeamWaveNetworkPackage;


message Member{
string MemberId = 1;
string MemberEmail = 2; 
string MemberPassphar = 3;
string MemberFullName = 4;
string MemberPhoto = 5;
}
message NoneTransportResponce{

    enum Responce{
    UserCreated = 0;
    }
}

service AuthurationService{

rpc SignInUser(Member) returns(NoneTransportResponce);
    
}

当我想 return 响应时:

public override async Task<NoneTransportResponce> SignUpUser(Member member, ServerCallContext context)
        {
            
            if (MemberAsistant.AddMember(member))
            {
                return await Task.FromResult(NoneTransportResponce.Types.Responce.UserCreated);
            }
            else
            {
                return null;
            }
        }

错误: 无法将类型 'TeamWaveNetworkPackage.NoneTransportResponce.Types.Responce' 隐式转换为 'TeamWaveNetworkPackage.NoneTransportResponce'

如何return在响应中枚举类型????

首先,请注意您的 NoneTransportResponce 类型是空的;它实际上 没有 每个实例 Responce 字段;为此,您需要类似的东西:

message NoneTransportResponce{
    Responce responceType = 1;
    enum Responce{
        UserCreated = 0;
    }
}

那么你应该可以使用(因为你需要 return 一条 NoneTransportResponce 消息,而不是 NoneTransportResponce.Responce 枚举值):

if (MemberAsistant.AddMember(member))
{
    return new NoneTransportResponce
    {
        ResponceType = Responce.UserCreated
    };
}

或非常相似的东西。请注意,您不需要 Task.FromResult 等,除非您根本没有异步代码,在这种情况下,删除 async 并使用 return Task.FromResult(new NoneTransportResponce {...});.