[英]IEnumerable cast error c#
我將嘗試在 Asp.Net MVC 5(代碼優先)中創建自定義身份驗證和授權。 在模型中我創建了 2 個類, UserAccount
和UserAccountModel
我在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
(一個)。 您可能想要的是FirstOrDefault
或SingleOrDefault
。
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.