Не удается неявно преобразовать тип 'System.Collections.Generi c .List 'to' DistributionEmail.Data.EmailInfo ' - PullRequest
0 голосов
/ 24 января 2020

Я пишу свое первое приложение для блейзоров, чтобы получить определенные данные электронной почты и изменить их, если это необходимо, и ПОЛУЧИТЬ СЛЕДУЮЩУЮ ОШИБКУ ОТКРЫТОГО. Не удается неявно преобразовать тип 'System.Collections.Generi c .List' в 'DistributionEmail.Data.EmailInfo'

. Я смоделировал мое приложение на рабочих примерах, которые я нашел. мой класс

public class EmailInfoDb
{
    [Key]
    public int EmailInfoID { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public string Address{ get; set; }

    [Required]
    public string Password { get; set; }
}

Интерфейс выглядит следующим образом

 public interface IEmailInfoListService
 {
    Task<List<EmailInfoDb>> Get();

    Task<EmailInfoDb> Get(int id);

    Task<EmailInfoDb> Add(EmailInfoDb emailinfo);

    Task<EmailInfoDb> Update(EmailInfoDb emailinfo);
}

public class EmailInfoListService : IEmailInfoListService
{
    private readonly ApplicationDbContext _context;

    public EmailInfoListService(ApplicationDbContext context)
    {
        _context = context;
    }

    public async Task<List<EmailInfoDb>> Get()
    {
         return await _context.Emails.ToListAsync();
    }

    public async Task<EmailInfoDb> Get(int id)
    {
        var email = await _context.Emails.FindAsync(id);
        return email;
    }

    public async Task<EmailInfoDb> Add(EmailInfoDb email)
    {
        _context.Emails.Add(email);
        await _context.SaveChangesAsync();
        return email;
    }

    public async Task<EmailInfoDb> Update(EmailInfoDb emailinfo)
    {
        _context.Entry(emailinfo).State = EntityState.Modified;
        await _context.SaveChangesAsync();
        return emailinfo;
    }
}

и, наконец, на странице бритвы у меня есть

private void PrepareForEdit(EmailInfoDb task)
{
    customHeader = "Edit Task";
    emailObject = task;
}

protected override async Task OnInitializedAsync()
{

    emailObject = await EmailService.Get();

}

private async Task RefreshData()
{
    emailInfoList = await EmailService.Get();
}

private async void DataChanged()
{
    emailInfoList = await EmailService.Get();
    StateHasChanged();
}

Ошибка появляется только для метод

protected override async Task OnInitializedAsync()
{
    emailObject = await EmailService.Get();
}

1 Ответ

0 голосов
/ 25 января 2020

Ваш метод EmailService.Get возвращает только экземпляр EmailInfo или List<EmailInfo>, но вы используете его так, как если бы он возвращал оба, посмотрите на это:

  protected override async Task OnInitializedAsync()
    {

        emailObject = await EmailService.Get();

    }

Здесь вы воспринимаете его как отдельный EmailInfo, но здесь вы (предположительно, основываясь на имени переменной) рассматриваете его как список:

private async Task RefreshData()
    {
        emailInfoList = await EmailService.Get();
    }

Итак, ваш метод OnInitializedAsync должен выглядеть что-то вроде этого:

  protected override async Task OnInitializedAsync()
    {

        emailObject = (await EmailService.Get())[0]; // get first EmailInfo instance

    }

Конечно, это очень наивная реализация, вы захотите проверить, не является ли List<EmailInfo>, который вы получаете из EmailService.Get, нулевым или пустым, но при условии, что это Единственное место, где вы используете коллекцию писем в качестве единственного экземпляра, должно компилироваться с этим изменением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...