访问对象属性而不转换为类型

You*_*sef 4 c# linq

我正在使用LINQ to entity返回一个对象列表

            var st = personsList.Select(p => new
            {
                ID = p.Id,
                Key = p.Key,
                Name = p.Name,
                Address = p.Address,
                City = p.City,
                PhoneNumber = p.PhoneNumber
            })
            return st.ToList();
Run Code Online (Sandbox Code Playgroud)

在我获得另一个类的列表后,我如何访问每个属性?

就像是

foreach(object s in St)
{
    string name = s.Name;
}
Run Code Online (Sandbox Code Playgroud)

我没有预定义的类来将对象强制转换为它.

这可以在不创建类并将对象强制转换为该类类型的情况下完成吗?

谢谢

Ser*_*eit 8

你在使用C#4吗?您可以尝试使用dynamic:

foreach(dynamic s in St)
{
    string name = s.Name;
}
Run Code Online (Sandbox Code Playgroud)

当然,风险是,如果您尝试访问该对象没有的属性,您只能在运行时找到它.

顺便说一下,在这种情况下,实际创建一个具有所有这些属性的类是不是更有意义?您显然需要在几个地方使用它们,并且您将获得类型安全和编译时错误的好处.


小智 5

你可以使用以下

foreach(object s in St)
{
   Type type = s.GetType();
   PropertyInfo property = type.GetProperty("Name");
   if(property !=null)
   {
       string name= (string )property.GetValue(s, null);
   }
}
Run Code Online (Sandbox Code Playgroud)

您必须将命名空间 System.Reflection 添加到类