【问题标题】:How to get an object of the property that it belongs to?如何获取它所属的属性的对象?
【发布时间】:2013-10-27 19:32:30
【问题描述】:
            Type type = entity.GetType();                
            PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);

            foreach (var p in properties)
            {

                if(p.Name == "State")
                {                        
                    context.Entry(INSTANCE_TO_WHICH_THE_PROPERTY_p_BELONGS_TO).State = FunctionThatWillSetTheState(p.State)
                }
            }

具有通用签名的方法接收类“实体”的实例

public static void EntityAction<TEntity>(TEntity entity)
        where TEntity : class, IObjectWithState

然后循环遍历该实例中的属性
我如何获取属性“p”所属的类的对象/实例?

因为我需要告诉这个函数

context.Entry(INSTANCE_TO_WHICH_THE_PROPERTY_p_BELONGS_TO).State = FunctionThatWillSetTheState(p.State)

谢谢。

【问题讨论】:

  • 你有实例:entity - 还是有什么我不明白的地方?
  • 请用您使用的编程语言标记您的问题。
  • Entity 是正在传递的类的通用实例,我需要知道传递了什么类型的实例(实体)这里是接收“实体”的方法:public static void EntityAction(TEntity 实体) where TEntity : class, IObjectWithState
  • 如果你有 TEntity 类型参数,那么你可以简单地说 typeof(TEntity).GetProperties(...) 而不是 entity.GetType() - 这可能有点优势,例如。更好的性能和实体处理 = null
  • 如果该实体没有孩子或父母,它将起作用。例如:类实体{公共字符串名称{get;设置;}公共地址地址{get; set;}} 其中“Entity”类是子类,“Address”是父类。我试图完成的方法的想法是获取一个“实体”并遍历其属性,包括“实体”具有的任何子级或父级。当循环遍历所有属性、父项和子项时,它将为“实体”及其子项和父项设置不同类型的状态。

标签: c# loops object properties instance


【解决方案1】:

您可以获得声明 PropertyInfo 的类的类型:

var t = property.DeclaringType;

如果您已经拥有该实例,那么您可以获得该特定实例的该属性的值>

var v = property.Getvalue(myInstance, null);

但是,如果您还没有实例(例如,您的示例中的“实体”),则不可能从 Type 或 PropertyInfo 获取实例。反射只处理类型和定义,而不是任何特定的实例。

【讨论】:

  • 例如:类实体 {public string Name {get;设置;}公共地址地址{get;设置;} 列表 人 {get; set;}} 其中“Entity”类有一个父“Address”和一个子“People”。我试图完成的方法的想法是获取一个“实体”并遍历其属性,包括“实体”具有的任何子级或父级。由于循环将遍历所有属性、父级和子级,它将为“实体”及其子级和父级设置不同类型的状态。
猜你喜欢
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2021-09-10
相关资源
最近更新 更多