【问题标题】:Passing a variable class object through to a class将变量类对象传递给类
【发布时间】:2014-12-02 11:05:01
【问题描述】:

我正在尝试确定以下是否可行,我已经进行了很多谷歌搜索,但我有点困惑。我很确定我可以计算出对象类上的类反射,并且一旦有了循环,更新数据库就不是问题了,但是我根本无法确定这是否可能。

如果我用一个固定的类对象来做这件事,我会很容易做到:

public void updateDB(obj_Users myObject)

但由于我有很多类对象需要很长时间,所以尝试使其更具动态性。

这是我想要通过的一个类的示例(但可以是任何遵循相同格式的内容):

public class obj_Users
{
    public Int32 UserID { get; set; }
    public String UserName { get; set; }
    public String FirstName { get; set; }
    public String Surname { get; set; }
    public String Email { get; set; }
    public Int32 UserRole { get; set; }
    public Int32 UserCompanyID { get; set; }
    public String UserPassword { get; set; }
    public Boolean IsAdmin { get; set; }
    public String SessionKey { get; set; }
}

这是我试图解释的一些伪代码:

public void updateDB(AnyClassObject obj_Users)
{
    // Loop through obj_Users and grab the properties

    // DB update call
}

【问题讨论】:

  • 您可以使用obj_Users.GetType().GetProperties() 获取属性,有什么特别困扰您的吗?
  • 抱歉获取属性不是问题,它能够将对象传递给 updateDB 我无法解决
  • AnyClassObject 是 obj_Users 的祖先吗?
  • 只要把object类型的参数设为,就可以传入任意类或结构体的实例。
  • 对不起,我的解释不好。 AnyClassObject 不存在,它是我想要实现的伪代码。我不知道应该是什么

标签: c#


【解决方案1】:

这个:

public void updateDB(object paramobj)
{
    foreach(var prop in paramobj.GetType().GetProperties())
    {
           //grab
    }
    // update
 }

【讨论】:

  • 我想要实现的是不必在 if 中列出每个对象 - 我有 100 个对象,所以这就是我想要动态化的一点
  • 这是有道理的。我怎么称呼它?当我做 DBCommon dbc = new DBCommon(); dbc.updateDB(obj_Users);它告诉我 obj_Users 是一种类型,但像变量一样使用
  • 它当然会告诉你。 obj_Users 是一个类,您需要创建它的一个实例并将其传递给您的方法。
【解决方案2】:

尝试循环获取属性

foreach(var prop in obj_Users.GetType().GetProperties()) {
    //use your props
}

【讨论】:

    【解决方案3】:

    您只需要您的参数为object 类型即可传递任何类或结构的实例。

    public void updateDB(object whatever)
    {
        foreach(var prop in whatever.GetType().GetProperties())
        {
           ... //do stuff
        }
    } 
    

    【讨论】:

      【解决方案4】:

      如果您遇到处理不同类的问题,通用方法应该满足您的需求:

      public void UpdateDB<T>(T obj)
      {
          var properties = typeof(T).GetProperties();
      
          foreach (var prop in properties)
          {
              // Here you loop through the properties.
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-15
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        相关资源
        最近更新 更多