【发布时间】:2016-11-16 13:59:00
【问题描述】:
我将尝试在 Asp.Net MVC 5(代码优先)中创建自定义身份验证和授权。在我创建了 2 个类的模型中,UserAccount 和 UserAccountModel
我在UserAccountModel 上有错误
return listAccounts.Where(acc => acc.UserName.Equals(username));
错误代码不是英文的,而是这样的:
无法将 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));
}
}
}
【问题讨论】:
-
好吧,您的方法是要返回一个
UserAccont(UserAccount的错字,顺便说一句),但Where方法只返回一个IEnumerable<UserAccont>。也许您的意思是FirstOrDefault而不是Where?我还强烈鼓励您遵循 .NET 命名约定。 -
您的方法期望返回类型为
UserAccont而不是List<UserAccont>的集合 -
如果您更改为 FirstOrDefault 或 SingleOrDefault,请不要忘记对登录方法的返回值进行空检查。此外,我会在您的 Find 方法上使用 FirstOrDefault 或 SingleOrDefault 并对它们进行空检查。如果传递的用户帐户不存在,您的查找将引发异常。
-
除了我们大多数人可能知道您试图描述的错误之外:如果您很难将异常消息翻译成英文,请尝试finderr.net。它从 .NET Framework 中以某些语言及其相应的英文翻译提供了广泛的例外选择(如果不是全部)。
标签: c# list casting ienumerable