获取对象类的类型,属性和值

时间:2017-12-01 21:57:53

标签: c# .net

有点模糊,当然强烈打字也会对我有所帮助,但在短时间内我无法承受这种奢侈,我必须解决这个问题。

说我有这个方法:

public static void MyMethod(string words, object params)
{
    connection.Open();
    connection.Execute(words, params);
} 

我正在寻找一种方法,在运行时,记录传递的params属性和值。我可以获取属性但无法找到提取值的方法。我假设使用了反射,但如果对象是强类型的,我只会知道如何执行此操作。

2 个答案:

答案 0 :(得分:1)

您可以使用反射完成此操作(Logger类基于您自己的实现,并且仅用于示例目的):

public static void MyMethod(String words, Object obj)
{
    if (obj == null)
        throw new ArgumentNullException("obj");

    Type objType = obj.GetType();
    List<PropertyInfo> props = new List<PropertyInfo>(objType.GetProperties());

    Logger.Log(
        "Object of type '{0}' with properties:",
        objType.ToString()
    );

    foreach (PropertyInfo prop in props)
    {
        Logger.Log("  - {0} [Type = {1}] [Value = {2}]",
            prop.Name,
            prop.PropertyType,
            prop.GetValue(this, null)
        );
    }

    connection.Open();
    connection.Execute(words, obj);
}

主要文件参考:

答案 1 :(得分:0)

之前我使用过这种方法 - 在Object上的扩展方法转换为Expando动态对象:

public static dynamic ToDynamic(this object value)
{
    IDictionary<string, object> expando = new ExpandoObject();

    foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType()))
    expando.Add(property.Name, property.GetValue(value));

    return expando as ExpandoObject;
}

然后,您可以使用IDictionary接口与对象进行交互,并确切地知道键/值对。