簡體   English   中英

IEnumerable 轉換錯誤 c#

[英]IEnumerable cast error c#

我將嘗試在 Asp.Net MVC 5(代碼優先)中創建自定義身份驗證和授權。 在模型中我創建了 2 個類, UserAccountUserAccountModel

我在UserAccountModel上有錯誤

return listAccounts.Where(acc => acc.UserName.Equals(username));

錯誤代碼不是英文而是類似這樣的:不可能將IEnumerable隱式轉換為列表,使用IEnumerable轉換

如何解決問題? 謝謝

//-------------------------------
//UserAccont.cs
//-------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace MvcSia.Models
{
    public class UserAccont
    {
        [Key]
        public int UserId { get; set; }

        [Required(ErrorMessage ="Choose a name")]
        public string Name{ get; set; }

        [Required(ErrorMessage ="Choose surname")]
        public string Surname{ get; set; }

        [Required(ErrorMessage ="Email required")]
        [RegularExpression(@"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$", ErrorMessage = "Invalid email")]
        public string Email { get; set; }

        [Required(ErrorMessage = "User Name required")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "User type required")]
        public string UserType { get; set; } 

        [Required(ErrorMessage = "Password required")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Compare("Password", ErrorMessage ="Password not valid")]
        [DataType(DataType.Password)]

        [Required(ErrorMessage = "User Name required")]
        public string ConfirmPassword { get; set; }

    }
}



//-------------------------------
//UserAccountModel.cs
//-------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcSia.Models
{
    public class UserAccontModel
    {
        private List<UserAccont> listAccounts = new List<UserAccont>();

        public UserAccont find(string username)
        {
            return listAccounts.Single(acc => acc.UserName.Equals(username));
        }

        public UserAccont login(string username, string password)
        {
            return listAccounts.Where(acc => acc.UserName.Equals(username));

        }

    }

}

當方法需要UserAccount時,您似乎正在嘗試返回IEnumerable<UserAccount>

嘗試使用方法返回單個用戶帳戶對象。

public UserAccont login(string username, string password)
{
    return listAccounts.Single(acc => acc.UserName.Equals(username));
}

你得到的錯誤是:

無法將類型IEnumerable<UserAccont>隱式轉換為UserAccont

您的方法試圖返回一個IEnumerable<UserAccont> (幾個),但簽名說它應該返回UserAccont (一個)。 您可能想要的是FirstOrDefaultSingleOrDefault

LINQ:何時將 SingleOrDefault 與 FirstOrDefault() 與過濾條件一起使用

當您使用Where ,它將創建一個IEnumerable<UserAccont>包含符合您的條件的所有項目。 但是您的方法的簽名表明您只想返回一項。

    public UserAccont login(string username, string password)
    {
        // Fetch one item instead.
        return listAccounts.FirstOrDefault(acc => acc.UserName.Equals(username));
    }
return listAccounts.Where(acc => acc.UserName.Equals(username));

這將返回一個IEnumerable<T>

return listAccounts.Where(acc => acc.UserName.Equals(username)).ToList();

這將返回一個List<T>

return listAccounts.Where(acc => acc.UserName.Equals(username)).FirstOrDefault();

這將在List<T>中返回“ T ”,在您的情況下將是UserAccount的單個實例,這最好是您想要的。

如果您只想返回UserAccont的類型,請使用FirstOrDefault () 方法。

public UserAccont login(string username, string password)
{
        List<UserAccont> listOfUserAcconts = new List<UserAccont>();

        //Stops you throwing an Exception is username is null
        if(listAccounts.Count() > 0 && !String.IsNullOrWhiteSpace(username))
        {
            return listAccounts.FirstOrDefault(acc => acc.UserName.Equals(username));
        }
        else
        {
            return listOfUserAcconts;
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM