无法访问通过quickwatch访问的结果

时间:2014-01-20 07:41:51

标签: c# .net reflection ado.net

enter image description here

我需要在'ResultColumns'中获取ColumnsNames,如上面的quickwatch图片所示。我无法在'query'中获取任何内容.bt可以通过如图所示的quickwatch访问它。如何访问它。请帮助。

此致 Jaison

1 个答案:

答案 0 :(得分:3)

您的字段query是私有的。这就是为什么你不能以“正常”的方式访问它。

你仍然可以通过反思强硬来访问它。您可以使用以下代码访问私有字段:

/// <summary>
/// Uses reflection to get the field value from an object.
/// </summary>    ///
/// <param name="type">The instance type.</param>
/// <param name="instance">The instance object.</param>
/// <param name="fieldName">The field's name which is to be fetched.</param>
/// <returns>The field value from the object.</returns>
internal static object GetInstanceField(Type type, object instance, string fieldName)
{
    BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic
        | BindingFlags.Static;
    FieldInfo field = type.GetField(fieldName, bindFlags);
    return field.GetValue(instance);
}

在您的情况下,您可以将其称为:

Korzh.EasyQuery.Db.DbQuery query = GetInstanceField(typeof(Korzh.EasyQuery.Db.SqlQueryBuilder), builder, "query") as Korzh.EasyQuery.Db.DbQuery;

但是,只有在绝对必要时才应该这样做。字段通常是私有的。并绕过这个我的原因是一些意想不到的行为。

该功能的代码取自以下答案: How to get the value of private field in C#?