我有一个返回对象的方法访问对象:从另一个方法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