IEnumerable to Object?

本文关键字:Object to IEnumerable | 更新日期: 2023-09-27 18:18:30

我对这究竟是如何工作的有点困惑。我有一个IEnumerable<T>列表,我从mySQL数据库中的存储过程中提取。

IEnumerable<CheckInVar> CheckInVars = 
    context.Database
           .SqlQuery<CheckInVar>("Call getCheckinVars('"WEB'")").ToList();

现在,我需要循环遍历这个对象来取出属性,以便我可以像这样使用它们吗?

foreach (var prop in CheckInVars.GetType().GetProperties())
{
    Console.WriteLine("{0} = {1}", prop.Name, prop.GetValue(CheckInVars, null));
}

或者我可以直接处理那个IEnumerable<CheckInVar>对象,或者我需要转换它来处理它吗?

public class CheckInVar
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column("ID")]
    public int ID { get; set; }
    public string Code { get; set; }
    public string VarValue { get; set; }
    public string AccessMethod { get; set; }
    public string Active { get; set; }
    public string DateCreated { get; set; }
    public string DateUpdated { get; set; }
    public string UpdatedBy { get; set; }
}

IEnumerable to Object?

尝试使用foreach:

IEnumerable<CheckInVar> CheckInVars = context.Database.SqlQuery<CheckInVar>(
    "Call getCheckinVars('"WEB'")").ToList();
foreach(CheckInVar item in CheckInVars)
{
    Console.WriteLine("ID: " + item.ID.ToString());
    Console.WriteLine("Code: " + item.Code);
    Console.WriteLine("VarValue: " + item.VarValue);
    //....
}

可以。

如果出于某种原因,您希望通过反射访问每个集合(IEnumerable)项的属性,那么您将不得不循环遍历IEnumerable并依次处理每个项。

使用你的例子:

foreach(var checkInVar in CheckInVars)
{
    foreach(var prop in checkInVar.GetType().GetProperties())
    { 
        Console.WriteLine("{0} = {1}", prop.Name, prop.GetValue(checkInVar)); 
    }
}

正如其他人提到的,反射真的有必要吗?不能直接访问属性吗?

我猜你可能正在使用反射来允许更改CheckInVar类型,而无需更改处理代码。

对于"我是否需要循环遍历这个对象"这个问题,答案是肯定的。但是正如Amy解释的那样,有一个更好的方法。

请记住,Checkinvar可以由一个Checkinvar也可以由多个Checkinvar组成。我