IEnumerable转换错误c#
我将尝试在Asp.NETMVC5中创建自定义身份验证和授权(代码优先)。在我创建的模型中,有两个类,IEnumerable转换错误c#,c#,list,casting,ienumerable,C#,List,Casting,Ienumerable,我将尝试在Asp.NETMVC5中创建自定义身份验证和授权(代码优先)。在我创建的模型中,有两个类,UserAccount和UserAccountModel 我在上的UserAccountModel上有一个错误 return listAccounts.Where(acc => acc.UserName.Equals(username)); 错误代码不是英文的,但大致如下: 无法将IEnumerable隐式转换为列表,请使用强制转换 如何解决这个问题?谢谢 //--------------
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));
}
}
}
//-------------------------------
//useraccount.cs
//-------------------------------
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.ComponentModel.DataAnnotations;
名称空间MvcSia.Models
{
公共类用户帐户
{
[关键]
public int UserId{get;set;}
[必需(ErrorMessage=“选择名称”)]
公共字符串名称{get;set;}
[必需(ErrorMessage=“选择姓氏”)]
公共字符串姓氏{get;set;}
[必需(ErrorMessage=“电子邮件必需”)]
[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=“无效电子邮件”)]
公共字符串电子邮件{get;set;}
[必需(ErrorMessage=“用户名必需”)]
公共字符串用户名{get;set;}
[必需(ErrorMessage=“用户类型必需”)]
公共字符串用户类型{get;set;}
[必需(ErrorMessage=“需要密码”)]
[数据类型(数据类型.密码)]
公共字符串密码{get;set;}
[比较(“密码”,ErrorMessage=“密码无效”)]
[数据类型(数据类型.密码)]
[必需(ErrorMessage=“用户名必需”)]
公共字符串ConfirmPassword{get;set;}
}
}
//-------------------------------
//UserAccountModel.cs
//-------------------------------
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
名称空间MvcSia.Models
{
公共类UserAccontModel
{
私有列表listAccounts=新列表();
公共用户帐户查找(字符串用户名)
{
返回listAccounts.Single(acc=>acc.UserName.Equals(UserName));
}
公共用户帐户登录(字符串用户名、字符串密码)
{
返回listAccounts.Where(acc=>acc.UserName.Equals(UserName));
}
}
}
当方法需要UserAccount
时,您似乎正在尝试返回IEnumerable
尝试使用方法返回单个用户帐户对象
public UserAccont login(string username, string password)
{
return listAccounts.Single(acc => acc.UserName.Equals(username));
}
您得到的错误是: 无法将类型
IEnumerable
隐式转换为
userAccount
您的方法试图返回一个IEnumerable
(多个),但签名说它应该返回userAccount
(一个)。你可能想要的是,或者
使用时,它将创建一个IEnumerable
,其中包含所有符合条件的项。但是您的方法的签名表明您只想返回一个项目
public UserAccont login(string username, string password)
{
// Fetch one item instead.
return listAccounts.FirstOrDefault(acc => acc.UserName.Equals(username));
}
这将返回一个IEnumerable
这将返回一个列表
这将在
列表中返回“T
”,在您的情况下,将是UserAccount
的单个实例,这最好是您想要的。如果您试图只返回UserAccount
的类型,则使用FirstOrDefault
()方法
public useraccount登录(字符串用户名、字符串密码)
{
List ListofUserAccounts=新列表();
//当用户名为空时停止引发异常
if(listAccounts.Count()>0&&!String.IsNullOrWhiteSpace(用户名))
{
返回listAccounts.FirstOrDefault(acc=>acc.UserName.Equals(UserName));
}
其他的
{
返回会计报表清单;
}
}
你的方法是要返回一个UserAccount
(输入UserAccount
,顺便说一句),但是Where
方法只返回一个IEnumerable
。也许您是指FirstOrDefault
而不是Where
?我还强烈建议您遵循.NET命名约定。如果您的方法希望返回类型为userAccount
,而不是List
的集合,请不要忘记在更改为FirstOrDefault或SingleOrDefault时,从登录方法检查您的返回值。另外,我会在Find方法上使用FirstOrDefault或SingleOrDefault,并对它们进行null检查。如果传递了一个不存在的用户帐户,您的发现将抛出一个异常。除此之外,我们大多数人可能都知道您试图描述的错误:如果您很难将异常消息翻译成英语,请尝试。在某些语言中,它有大量的例外(如果不是全部的话)以及相应的英语翻译。
return listAccounts.Where(acc => acc.UserName.Equals(username));
return listAccounts.Where(acc => acc.UserName.Equals(username)).ToList();
return listAccounts.Where(acc => acc.UserName.Equals(username)).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;
}
}