Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IEnumerable转换错误c#_C#_List_Casting_Ienumerable - Fatal编程技术网

IEnumerable转换错误c#

IEnumerable转换错误c#,c#,list,casting,ienumerable,C#,List,Casting,Ienumerable,我将尝试在Asp.NETMVC5中创建自定义身份验证和授权(代码优先)。在我创建的模型中,有两个类,UserAccount和UserAccountModel 我在上的UserAccountModel上有一个错误 return listAccounts.Where(acc => acc.UserName.Equals(username)); 错误代码不是英文的,但大致如下: 无法将IEnumerable隐式转换为列表,请使用强制转换 如何解决这个问题?谢谢 //--------------

我将尝试在Asp.NETMVC5中创建自定义身份验证和授权(代码优先)。在我创建的模型中,有两个类,
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;
        }
}