C# 有没有一种方法可以访问.net实体属性,而不必使用数组循环直接调用它?

C# 有没有一种方法可以访问.net实体属性,而不必使用数组循环直接调用它?,c#,.net,asp.net-mvc,entity-relationship,C#,.net,Asp.net Mvc,Entity Relationship,在Entities文件夹中,我们有不同类型的实体,如User.cs。在User.cs中,我们有此实体的属性,如: public string UserName { get; set; } public string ProfileImagePath { get; set; } 除了像User.UserName那样直接调用这些属性外,还有其他方法访问这些属性吗 如果我们可以循环浏览属性列表,而不必知道属性名称,那就太好了。对于实体中的第一个属性,我们可能会考虑类似于用户[0]的内

在Entities文件夹中,我们有不同类型的实体,如User.cs。在User.cs中,我们有此实体的属性,如:

    public string UserName { get; set; }
    public string ProfileImagePath { get; set; }
除了像User.UserName那样直接调用这些属性外,还有其他方法访问这些属性吗


如果我们可以循环浏览属性列表,而不必知道属性名称,那就太好了。对于实体中的第一个属性,我们可能会考虑类似于用户[0]的内容。谢谢

您可以使用反射:

foreach(var property in entity.GetType().GetProperties()){
    var value = property.GetValue(entity, null);
    // do whatever you want to do with the value
}

您可能需要添加一些
BindingFlags
,比如
BindingFlag.Instance
BindingFlags.Public
(我不太确定默认设置)。如果是这种情况,请使用
entity.GetType().GetProperties(BindingFlag.Instance | | BindingFlags.Public)
您可以使用反射:

foreach(var property in entity.GetType().GetProperties()){
    var value = property.GetValue(entity, null);
    // do whatever you want to do with the value
}

您可能需要添加一些
BindingFlags
,比如
BindingFlag.Instance
BindingFlags.Public
(我不太确定默认设置)。如果是这种情况,请使用
entity.GetType().GetProperties(BindingFlag.Instance | | BindingFlags.Public)
您可能需要查看反射。类似于此,您可以枚举类
A
的对象
yourInstance
的所有字符串属性值:

foreach(var propertyInfo in typeof(A).GetProperties())
{
    if(Type.GetTypeCode(propertyInfo.PropertyType) == TypeCode.String)
        Console.WriteLine((string)propertyInfo.GetValue(yourInstance, null));
}

您可能需要查看反射。类似于此,您可以枚举类
A
的对象
yourInstance
的所有字符串属性值:

foreach(var propertyInfo in typeof(A).GetProperties())
{
    if(Type.GetTypeCode(propertyInfo.PropertyType) == TypeCode.String)
        Console.WriteLine((string)propertyInfo.GetValue(yourInstance, null));
}

@伊沃维布洛:他可能只是列举了一些特定类型的属性。如果没有,op可以省略这个检查…@ivowiblo:他可能只是列举了一些特定类型的属性。如果没有,op可以省略这个检查…值得注意的是反射相当慢。当你使用它来收集关于给定类型的元数据并构建表达式来读取实际数据时,它工作得很好。它很慢,但是没有人说它必须很快。如果您必须执行大量操作,那么速度会很慢,但是框架本身使用了大量反射,因此。。。这取决于他为什么需要它,而创建表达式的成本要高于使用反射,因此这取决于他是否需要多次使用它。在这种情况下,关键在于快速响应。我听说使用反射很慢。如果我对每一个实体和属性都使用它,这可能就不好了。有什么想法吗?我正试图用它来加快开发速度。我决定不使用EF,因为它很慢。我计划使用它只是将值从存储过程传递到实体。值得注意的是,反射相当慢。当你使用它来收集关于给定类型的元数据并构建表达式来读取实际数据时,它工作得很好。它很慢,但是没有人说它必须很快。如果您必须执行大量操作,那么速度会很慢,但是框架本身使用了大量反射,因此。。。这取决于他为什么需要它,而创建表达式的成本要高于使用反射,因此这取决于他是否需要多次使用它。在这种情况下,关键在于快速响应。我听说使用反射很慢。如果我对每一个实体和属性都使用它,这可能就不好了。有什么想法吗?我正试图用它来加快开发速度。我决定不使用EF,因为它很慢。我计划使用它将值从存储过程传递到实体。