2011-11-29 75 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;