我有一個返回對象的方法訪問對象:從另一個方法C#
private object myObjectMethod(){
//...
return myObject;
}
但在另一種方法我想取出這個對象:
private void myotherMethod(){
var x = myObjectMethod();
// Now how would I access the properties of myObject?
}
我有一個返回對象的方法訪問對象:從另一個方法C#
private object myObjectMethod(){
//...
return myObject;
}
但在另一種方法我想取出這個對象:
private void myotherMethod(){
var x = myObjectMethod();
// Now how would I access the properties of myObject?
}
最好的辦法是隻從方法返回您正在處理的實際類型
但是,如果這不是一個選項,並且你真的被卡住了,只是從你的方法返回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
,那麼代碼可能存在一些更深層次的問題。
變化
private object myObjectMethod(){
...
return myObject;
}
到
private TypeOfMyObject myObjectMethod(){
...
return myObject;
}
您應該在方法的返回類型更改爲你所感興趣的實際類。 ,也許你需要改變它的知名度向公衆開放。
您也可以使用反射或鑄造
(obj as MyObject).Stuff;
你可以用你的方法的通用版本:
public static T MyObjectMethod<T>()
{
return (T)myObject;
}
然後:
var myObject = MyObjectMethod<MyObjectClass>();
myObject.Property;
你能告訴我們爲什麼'myObjectMethod'的返回類型是'object'? – ChaosPandion
我不能做x。它不顯示選項,但選項像tostring等 – Autolycus
你看過我的問題嗎? – ChaosPandion