Получить родительский класс нулевого объекта (C # Reflection) - PullRequest
3 голосов
/ 15 марта 2010

Как бы получить родительский класс объекта со значением null?

Например ...

ClassA содержит int? i, для которого не задано никакого значения при создании класса.

Затем в другом месте кода я хочу передать i в качестве параметра какой-либо функции. Используя i в качестве единственной информации, я хочу выяснить, что ClassA "владеет" i.

Причина этого в том, что ClassA также содержит какой-то другой объект, и я хочу вызвать значение этого другого объекта из той же функции, упомянутой в предыдущем абзаце.

Также может быть:

public class A
{
    public class B
    {
        public int? i;
        public int? j;
    }

    B classBInstance = new B();
    public string s;
}

{
    ...
    A someClassAInstance = new A();
    ...
    doSomething(someClassAInstance.classBInstance.i);
    ...
}

public static bool doSomething(object theObject)
{
    string s = /* SOMETHING on theObject to get to "s" from Class A */;
    int someValue = (int)theObject;
}

Ответы [ 5 ]

6 голосов
/ 15 марта 2010

Вы не можете. Передайте экземпляр A в doSomething.

3 голосов
/ 15 марта 2010

class A не является Родителем (основанием) своих членов. Просто их держатель.

Таким образом, вы не можете делать то, что вы хотите, передавая int или int? вокруг вас, не включая информацию о классе.

2 голосов
/ 15 марта 2010

Параметр, отправляемый методу, не содержит никакой информации, которую можно использовать для определения того, из какого объекта он изначально пришел. То, что отправлено в метод, является просто копией обнуляемого целого, заключенного в объект.

Так что то, о чем вы просите, невозможно. Единственный способ сделать что-то подобное - это проанализировать стек вызовов, чтобы найти вызывающий метод, а затем проанализировать код этого метода, чтобы определить, откуда было взято значение параметра.

0 голосов
/ 15 марта 2010

Это невозможно, так как вы передаете 'i', который является членом класса B. Но класс B не содержит ссылку на экземпляр класса A. Экземпляр необходим для получения значения 's', так как его нестатическое поле.

0 голосов
/ 15 марта 2010

Не можете вместо этого использовать словарь или пары ключей-значений, чтобы int был связан с "s" таким образом? Проблема в том, что int не знает, какому объекту он принадлежит.

...