查找实例化对象的位置



我正在尝试使用反射来确定我的对象是在哪里创建的。例如:

public class MyClass
{
    public int Id { get; set; }
    public string Message { get; set; }
}
public static class Students
{
    public static class FirstGrade
    {
        public static MyClass John = new MyClass { Id = 1, Message = "Some Text" };
    }
}

现在,在我的代码中的其他地方,我想使用MyClass对象John,通过该对象,我想确定John是在哪里创建的,这样我就可以确定他是一年级的学生。我也想知道对象名称"John",因为这可能会更改:

MyClass student = Students.FirstGrade.John;

我想下面就是您的要求。或者,如果您想知道对象是在哪里真正创建的,而不仅仅是在哪里引用的,那么您可以访问MyClass构造函数中的System.Diagnostics.StackTrace对象。

正如其他人所提到的,似乎应该重新考虑这个设计。

public static class Students
{
    public static class FirstGrade {
        public static MyClass John = new MyClass { Id = 1, Message = "Some Text" };
    }
    public static class SecondGrade {
        public static MyClass John = new MyClass { Id = 2, Message = "Some Text" };
    }
    public static Type FindStudent(MyClass s, out String varName) {
        varName = null;
        foreach (var ty in typeof(Students).GetNestedTypes()) {
            var arr = ty.GetFields(BindingFlags.Static | BindingFlags.Public);
            foreach (var fi in arr) {
                if (fi.FieldType == typeof(MyClass)) {
                    Object o = fi.GetValue(null);
                    if (o == s) {
                        varName = fi.Name;
                        return ty;
                    }
                }
            }
        }
        return null;
    }
    public static void FindJohn() {
        String varName = null;
        Type ty = FindStudent(SecondGrade.John, out varName);
        MessageBox.Show(ty == null ? "Not found." : ty.FullName + " " + varName);
    }
}

相关内容

  • 没有找到相关文章

最新更新