【问题标题】:Class does not implement interface member because it does not have matching return type [closed]类没有实现接口成员,因为它没有匹配的返回类型[关闭]
【发布时间】:2020-11-06 14:25:55
【问题描述】:

为 ASP.NET 核心 Web API 应用程序实现服务并收到持续错误。

  1. 即使我只是实现接口而不向方法添加任何额外代码,错误仍然存​​在。
  2. 我已经检查、仔细检查,甚至三次检查所有签名以确保没有拼写错误。
  3. 在查看其他 SO 线程后尝试将 GetUserInvite 函数设置为 IEnumerable。还是没有运气。

界面:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using API.Data.Dtos.InviteDto;
using API.Domain;

namespace API.Services
{
    public interface IInviteService
    {
        Task<UserInvite> GetUserInvite(Guid sourceUserId, Guid invitedUserId);
        Task<IEnumerable<InviteDto>> GetUserInvites(string predicate, Guid userId);
        Task<User> GetUserWithInvites(Guid userId);
    }
}

服务:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using API.Data;
using API.Data.Dtos.InviteDto;
using API.Domain;
using Microsoft.EntityFrameworkCore;

namespace API.Services
{
    public class InviteService : IInviteService
    {
        private readonly DataContext _context;
        public InviteService(DataContext context)
        {
            _context = context;
        }

        public async Task<UserInvite> GetUserInvite(Guid sourceUserId, Guid invitedUserId)
        {
            return await _context.Invites.FindAsync(sourceUserId, invitedUserId);
        }

        public async Task<User> GetUserWithInvites(Guid userId)
        {
            return await _context.Users.Include(x => x.InvitedUsers).FirstOrDefaultAsync(x => x.Id == userId);
        }

        public async Task<IEnumerable<InviteDto>> GetUserInvites(string predicate, Guid userId)
        {
            var users = _context.Users.OrderBy(u => u.UserName).AsQueryable();
            var invites = _context.Invites.AsQueryable();

            if (predicate == "invited")
            {
                invites = invites.Where(invite => invite.SourceUserId == userId);
                users = invites.Select(invite => invite.InvitedUser);
            }

            if (predicate == "invitedBy")
            {
                invites = invites.Where(invite => invite.InvitedUserId == userId);
                users = invites.Select(invite => invite.SourceUser);
            }

            return await users.Select(user => new InviteDto
            {
                Username = user.UserName,
                City = user.City
            }).ToListAsync();
        }

    }
}

【问题讨论】:

  • 您的代码返回类型是 IEnumerable 或 UserInvite。因此,从数据库返回的查询与这两种类型中的一种不匹配。
  • 与其试图非常确定你已经正确地写出签名,只需让 VS 通过从错误中选择该选项来自动生成它们,然后你就不必担心尝试弄清楚有什么区别。
  • @jdweng 错误发生在编译之前,因此数据库永远不会被交互。控制台错误表明 GetUserInvite 也有问题。
  • @Servy 我实际上已经尝试过使用 VS 生成代码(并且也只有抛出异常样板代码),但它仍然存在同样的问题。
  • 代码是否在不同的模块中?两个模块中的 using 语句不同。

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


【解决方案1】:

问题是 VS 中的错误。我重新启动并编译了所有内容。感谢所有提供帮助的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多