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; }
}
尝试使用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组成。我