有点模糊,当然强烈打字也会对我有所帮助,但在短时间内我无法承受这种奢侈,我必须解决这个问题。
说我有这个方法:
public static void MyMethod(string words, object params)
{
connection.Open();
connection.Execute(words, params);
}
我正在寻找一种方法,在运行时,记录传递的params
属性和值。我可以获取属性但无法找到提取值的方法。我假设使用了反射,但如果对象是强类型的,我只会知道如何执行此操作。
答案 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接口与对象进行交互,并确切地知道键/值对。