доступ к объекту из другого метода c # - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть метод, который возвращает объект:

private object myObjectMethod(){ 
    //...
    return myObject;
}

Но в другом методе я хочу получить этот объект:

private void myotherMethod(){   
    var x = myObjectMethod();
    // Now how would I access the properties of myObject?
}

Ответы [ 4 ]

8 голосов
/ 30 ноября 2011

Лучший способ - просто вернуть фактический тип, с которым вы имеете дело, из метода


Но если это не вариант, и вы действительно застряли сobject возвращается из вашего метода, у вас есть несколько вариантов.

Если вы знаете правильный тип, приведение будет самым простым способом:

((ActualType)x).SomeProperty;

Или для проверки правильности приведения:

string val;
if (x is ActualType)
    val = (x as ActualType).SomeProperty;

Или, если вы знаете имя свойства, но не тип x, тогда:

PropertyInfo pi = x.GetType().GetProperty("SomeProperty");
string somePropertyValue = (string)pi.GetValue(x, null);

Или, если вы 'Если вы используете C # 4, вы можете использовать dynamic

string somePropertyValue = ((dynamic)x).SomeProperty;

Просто не сходите с ума от динамики. Если вы обнаружите, что чрезмерно используете dynamic, возможно, что-то глубжепроблемы с вашим кодом.

5 голосов
/ 30 ноября 2011

Изменить

private object myObjectMethod(){ 
    ...
    return myObject;
}

на

private TypeOfMyObject myObjectMethod(){ 
    ...
    return myObject;
}
1 голос
/ 30 ноября 2011

Вы можете использовать общую версию вашего метода:

public static T MyObjectMethod<T>()
{
    return (T)myObject;
}

А затем:

var myObject = MyObjectMethod<MyObjectClass>();
myObject.Property;
1 голос
/ 30 ноября 2011

Вам следует изменить тип возвращаемого значения вашего метода на тот класс, который вам интересен. И, вероятно, вам нужно будет изменить его видимость на общедоступный.

Вы также можете использовать отражение или приведение

(obj as MyObject).Stuff; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...