我为我的团队创建了一个工具,该工具使他们可以使用LinqPad的Dump()方法直观地查看对象。这纯粹是供开发团队用来使事情变得更容易,而不是必须附加并非总是可能的调试器。
他们输入要转储的对象的名称,程序在当前上下文中执行该操作。
例如用户输入Sales.CurrentUser
,应用程序使用LinqPad的Dump()方法可视化CurrentUser对象。
public void VisualiseObject()
{
object CurrentObject = this;
string Result = GetObjectFromUser("Enter Propery or Field path eg. Sales.CurrentUser", "");
if (Result == null)
return;
else if (Result != string.Empty)
{
string[] Objects = Result.Split(".".ToCharArray());
try
{
foreach (string objName in Objects)
{
CurrentObject = GetPropValue(CurrentObject, objName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
if (CurrentObject == null)
{
MessageBox.Show("Object is null");
return;
}
}
CurrentObject.Dump(Result);
}
public static object GetPropValue(object src, string propName)
{
object result = null;
try
{
result = src.GetType().GetProperty(propName).GetValue(src, null);
}
catch
{
try
{
result = src.GetType().GetField(propName).GetValue(src);
}
catch (Exception)
{
result = null;
}
}
return result;
}
无论如何,我试图想出一种方法来支持用户为数组,列表或字典对象提供索引或键,并以反射的方式进行处理。
用户可以提供例如。数组或列表Sales.AllUsers[0]
或字典Sales.Items["Water"]
有什么想法吗?
答案 0 :(得分:0)
您可以尝试使用VisualElements
,它使您可以解析表达式(请小心代码注入)。
或者您可以尝试访问数组的Get方法: (假设prop是int []类型的变量)
var getter = array.GetType().GetMethod("Get");
var value = getter.Invoke(array, new object[] { index });
尚未使用Dictionary或Collection进行测试,但也应以相同的方式工作。