2011-11-29 51 views
0

我有一个返回对象的方法访问对象:从另一个方法C#

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

但在另一种方法我想取出这个对象:

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

你能告诉我们为什么'myObjectMethod'的返回类型是'object'? – ChaosPandion

+0

我不能做x。它不显示选项,但选项像tostring等 – Autolycus

+1

你看过我的问题吗? – ChaosPandion

回答

7

最好的办法是只从方法返回您正在处理的实际类型


但是,如果这不是一个选项,并且你真的被卡住了,只是从你的方法返回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,那么代码可能存在一些更深层次的问题。

+4

或者首先返回正确的类型。 –

+1

你也可以在你的答案中加入'dynamic'。 – ChaosPandion

+0

+1 - 我想你已经涵盖了一切。:) – ChaosPandion

5

变化

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

private TypeOfMyObject myObjectMethod(){ 
    ... 
    return myObject; 
} 
1

您应该在方法的返回类型更改为你所感兴趣的实际类。 ,也许你需要改变它的知名度向公众开放。

您也可以使用反射或铸造

(obj as MyObject).Stuff; 
1

你可以用你的方法的通用版本:

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

然后:

var myObject = MyObjectMethod<MyObjectClass>(); 
myObject.Property;